Создайте общедоступную среду для построения и просмотра фрагментов изображений

Контейнеры разработки позволяют разработчикам работать в общих средах, настроенных в соответствии с потребностями их проектов. Вот шаги, которые я предпринял для создания контейнера разработки для создания фрагментов карты для использования в моих веб-приложениях.

Конфигурация контейнера разработки

Я начал новый проект «плиточный контейнер» в VS Code. Он состоит из папки .devcontainer, а также папок для наших входных изображений и выходных плиток. Папка с изображениями начинается с одного изображения — образца GeoTiff из Чикаго, который я нашел в Интернете. Вот как наш проект выглядит на данный момент.

Папка .devcontainer содержит определение нашего контейнера разработки. Он определяет базовое изображение, содержащее необходимые нам инструменты и библиотеки, а также расширение (Live Server) для обслуживания HTML-страницы. Мы также используем этот файл для объявления нашей начальной оболочки терминала.

{
    "name": "GDAL",
    "image": "thinkwhere/gdal-python:latest",
    "extensions": [
      "ritwickdey.LiveServer"
    ],
    "settings": {
      "terminal.integrated.shell.linux": "/bin/bash"
    }
  }

Затем нам нужно установить пакет удаленной разработки Visual Studio Code. Этот плагин позволяет нам открывать проекты в новых средах, включая контейнеры, даже если они выполняются локально. На самом деле мы можем использовать его для запуска указанного нами контейнера и использовать его в качестве среды для нашего проекта. Сделайте это, щелкнув новый значок ›‹ в левом нижнем углу или нажав Ctrl-Shift-P (или Cmd-Shift-P), чтобы открыть палитру команд. В любом случае вы выберете «Повторно открыть в контейнере». Затем VS Code запустит запуск контейнера и повторно откроет ваш проект внутри него. Да — вам нужно установить Docker в вашей системе, чтобы запустить контейнер.

Как только проект будет открыт внутри нашего контейнера, вы можете открыть терминал и найти инструменты GDAL, готовые к использованию. Например, вот вариант справки для gdal2tiles.py:

ГДАЛ

GDAL — это инструмент, который мы будем использовать для фактического создания плиток. Наш базовый образ включает скрипты Python для удобного выполнения его популярных функций, в том числе скрипт gdal2tiles.py, на котором мы сосредоточимся. В этом случае мы хотим взять образец GeoTiff и разбить его на фрагменты карты. GDAL принимает множество аргументов командной строки, он может даже работать с изменяющимися проекциями. Однако в нашем примере мы будем действовать довольно просто. Вот команда для создания наших тайлов.

gdal2tiles.py -v --zoom=5-12 -w leaflet images/SP27GTIF.tiff tiles/chicago/

Флаг -v запрашивает подробный вывод. С опцией масштабирования мы устанавливаем уровни масштабирования, для которых хотим создавать плитки. Аргумент -w сообщает gdal2tiles.py, что мы также хотели бы создать образец HTML-файла для просмотра плиток.

Визуализация

Хотя вы можете использовать эту среду для создания своего пользовательского интерфейса, мы пока пойдем кратчайшим путем и воспользуемся образцом средства просмотра, созданным GDAL на предыдущем шаге. Он поддерживает несколько распространенных картографических библиотек JavaScript, включая Leaflet, OpenLayers и Google Maps. Поскольку мы выбрали Leaflet, результирующая карта выглядит так, когда мы размещаем файл с расширением Live Server, которое мы настроили ранее.

Вы можете видеть, что наши изображения Чикаго показаны в виде наложения поверх нашей базовой карты. Увеличение и уменьшение масштаба регулирует размер и положение различных плиток, которые просто служат статическими ресурсами.

На практике вы, вероятно, захотите создать собственное приложение для визуализации и использовать для этого другой базовый образ. Вы можете создать свой собственный образ, который включает инструменты и библиотеки, необходимые для создания предпочитаемого вами веб-приложения.

Заключение

Всего за несколько простых шагов настройки мы можем создать среду разработки, позволяющую всем членам нашей команды быстро работать с одними и теми же инструментами. Благодаря использованию контейнеров это делается без необходимости самостоятельно находить, устанавливать и настраивать все эти инструменты.