Создание супер-оверлеев с помощью gdal2tiles

Мано Маркс, команда Google Geo API
сентябрь 2009 г.

Задача

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

Вступление

Геобраузеры, такие как Google Earth и Google Maps, предоставляют спутниковые снимки и фрагменты карт. Однако иногда вы можете захотеть использовать свои собственные. Изображения или растровые данные бывают разных форм и имеют множество применений.

  • Размещение собственных спутниковых или аэрофотоснимков в геобраузере
  • Размещение исторических карт поверх существующих изображений, таких как слой « Карты Рамси » в Google Планета Земля.
  • Импорт данных ГИС в растровой форме
  • Размещение лидарных или инфракрасных изображений в геобраузере

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

Мозаика разбивает ваш файл изображения на множество разных изображений, которые загружаются, когда они появляются в поле зрения. Вы создаете одно изображение с низким разрешением для отображения, в то время как пользователь сильно уменьшен. В той же области вы создаете четыре изображения с более высоким разрешением для более близкого просмотра. Для каждой области, на которую накладывается изображение, вы создаете еще четыре изображения с более высоким разрешением для более близкого масштабирования и т. д. Это известно как метод дерева квадрантов , и именно так изображения укладываются в мозаику для Google Планета Земля и Карты Google. Этот процесс более подробно описан в статье Руководства разработчика KML, посвященной регионам .

Это можно сделать вручную с помощью приложения для редактирования графики, такого как Adobe PhotoShop или GIMP, но это может быть сложным, утомительным и подверженным ошибкам. Существует также ряд хороших приложений, в основном для Windows, таких как SuperOverlay , Arc2Earth и MapCruncher в сочетании с CrunchUp2KML .

Если вы хотите автоматизировать процесс или добавить функциональность в собственное приложение, GDAL предоставляет вам богатый набор инструментов для работы с растровыми и векторными данными . В этой статье рассматриваются параметры командной строки. Однако библиотеки также могут быть легко включены в ваши собственные приложения. В этом руководстве вы будете использовать gdalinfo , gdal_translate , gdalwarp и gdal2tiles . Конечным результатом является супер-оверлей.

Действия командной строки

Есть шесть шагов для использования GDAL в командной строке.

  1. Загрузите и установите GDAL
  2. Скачать изображение
  3. Используйте gdalinfo для определения информации об изображении
  4. Используйте gdal_translate для географической привязки изображения
  5. Используйте gdalwarp для изменения проекции изображения.
  6. Используйте gdal2tiles , чтобы разбить изображение на фрагменты и создать соответствующий код KML.

Шаг 1. Загрузите и установите GDAL.

Начните с загрузки и установки GDAL, как описано здесь .

Шаг 2: Загрузите изображение

Вы можете использовать любое изображение. В Интернете есть несколько источников географических данных. Вы можете использовать любой из них, но вы должны знать границы изображения — широту и долготу каждого из углов изображения. В этом руководстве используется изображение NASA Blue Marble , доступное для загрузки с веб-сайта NASA . Эти снимки были сделаны в 2004 году и представляют собой прекрасное изображение Земли из космоса. Выберите один из файлов в правом нижнем углу правой панели навигации.

Если вы используете собственное изображение и знаете, что оно уже геотрансформировано, вы можете перейти к шагу 5. В противном случае перейдите к шагу 3.

Шаг 3: Получите информацию об изображении

После того, как вы установили библиотеки GDAL и выбрали изображение, вам нужно получить некоторую информацию об изображении, чтобы вы могли его географически привязать. В частности, вам нужны пиксельные и линейные позиции каждого угла изображения. Если представить изображение в виде таблицы со столбцами и строками, то пиксели — это столбцы, а строки — это строки.

GDAL предоставляет удобную утилиту gdalinfo для сбора этой информации. В командной строке просто введите gdalinfo filename , заменив filename на путь к файлу. Вы должны получить вывод, который выглядит следующим образом:

Driver: JPEG/JPEG JFIF
Files: world_200401.jpg
Size is 21600, 10800
Coordinate System is `'
Image Structure Metadata:
  SOURCE_COLOR_SPACE=YCbCr
  INTERLEAVE=PIXEL
  COMPRESSION=JPEG
Corner Coordinates:
Upper Left  (    0.0,    0.0)
Lower Left  (    0.0,10800.0)
Upper Right (21600.0,    0.0)
Lower Right (21600.0,10800.0)
Center      (10800.0, 5400.0)
Band 1 Block=21600x1 Type=Byte, ColorInterp=Red
  Image Structure Metadata:
    COMPRESSION=JPEG
Band 2 Block=21600x1 Type=Byte, ColorInterp=Green
  Image Structure Metadata:
    COMPRESSION=JPEG
Band 3 Block=21600x1 Type=Byte, ColorInterp=Blue
  Image Structure Metadata:
    COMPRESSION=JPEG

Важная информация для этого урока — верхняя левая, нижняя левая, верхняя правая, нижняя правая линии. Они сообщают вам значения пикселей и линий для каждого угла. Верхний левый в этом случае находится на 0,0, а нижний правый на 21600,10800.

Шаг 4: Географическая привязка изображения

Географическая привязка в данном случае означает создание метаданных, описывающих географическое положение каждого из углов изображения. Используя информацию, полученную на шаге 3, и gdal_translate , вы можете присвоить файлу информацию о пространственной привязке. Это создает файл VRT из изображения world_200401.jpg , bluemarble1.vrt . Файлы VRT — это XML-файлы, содержащие информацию о конкретном преобразовании, в данном случае о шаге gdal_translate . Вы будете использовать его снова на следующем шаге, чтобы создать окончательный набор плиток. gdal_translate позволяет вам делать несколько типов вывода файлов, включая основные форматы файлов изображений. Использование выходов VRT позволяет вам фактически отложить создание выходных файлов до последнего шага. Это повышает эффективность и сокращает время ожидания для отдельных шагов, если вы выполняете командную строку. Вот команда, которую вы должны запустить:

gdal_translate -of VRT -a_srs EPSG:4326 -gcp 0 0 -180 90 -gcp 21600 0 180 90 -gcp 21600 10800 180 -90 world_200401.jpg bluemarble1.vrt

В этой строке много информации, так что вот она:

  • -of формат вывода, в данном случае VRT.
  • -a_srs присваивает файлу систему пространственной привязки. Это сообщает любому приложению, использующему его, какая система координат используется. В данном случае используется EPSG:4326, аналогичная WGS84, системе координат, используемой Google Earth.
  • -gcp , или наземная контрольная точка, присваивает координаты позициям в файле. В этом случае вам на самом деле нужны только три точки, поскольку изображение представляет собой прямоугольник, и поэтому четвертую точку можно легко определить. Для -gcp определите gcp, установив пиксель, затем номер строки, а затем долготу и широту. Каждая из них отделена пробелом.
  • Последние два параметра — исходный файл и целевой файл.

Шаг 5: Деформируйте изображение

Исходное изображение не было создано для круглого земного шара, оно было создано, чтобы казаться плоским. В терминах ГИС это проекция , что означает, что это двумерное представление трехмерного объекта. Проекция требует искажения изображения, чтобы оно выглядело так, как вы ожидаете от плоского изображения Земли.

Чтобы оно выглядело правильно, вам нужно деформировать изображение, чтобы оно соответствовало земному шару. К счастью, GDAL также предоставляет отличный инструмент для этого. Просто введите gdalwarp -of VRT -t_srs EPSG:4326 bluemarble1.vrt bluemarble2.vrt . Это создаст новый файл bluemarble2.vrt, содержащий метаданные о процедуре деформации.

Шаг 6: Создайте плитки

Вы почти закончили, но эта часть займет больше всего времени. Чтобы создать плитки, введите gdal2tiles.py -p geodetic -k bluemarble2.vrt . -k принудительно выводит KML. Это создаст структуру каталогов с супер-наложением. Поскольку каждый из этих файлов изображений должен создаваться отдельно, для запуска требуется некоторое время. Для больших изображений теперь вы можете пойти, выпить чашку кофе, вздремнуть, может быть, перекусить. Когда вы закончите, откройте doc.kml и посмотрите на результаты!

Заключение

Этот учебник лишь поверхностно описывает возможности GDAL, но предоставляет удобный механизм для создания плиток. Основные библиотеки GDAL написаны на C++, но они предоставляют привязки для Perl, Python, VB6, R, Ruby, Java и C#/.NET, что означает, что вы можете легко включать GDAL в свои собственные приложения. Кроме того, многие утилиты, в том числе gdal2tiles , написаны на Python, что упрощает их включение в приложения Python. gdal2tiles также может генерировать страницы Google Maps API и OpenLayers .