Как вырезать «мозаичное изображение» из набора растровых данных с помощью GDAL?

22

Я работаю над приложением, которое должно создавать плитки (jpeg) из заданного набора растровых данных. Сначала я хотел использовать gdal2tiles.py, но его производительность, похоже, можно улучшить.

Это заставляет меня задать следующий вопрос: Какой самый быстрый способ вырезать «мозаичное изображение» из набора растровых данных с использованием GDAL? И под «плиточным изображением» я подразумеваю просто JPEG или PNG.

В моем прототипе я использую привязки MapServer C # MapScript для выполнения этой работы. То есть я создаю объект карты, перебираю все границы листов, которые мне нужно вырезать, устанавливаю экстент объектов карты, а затем сохраняю полученное изображение. Производительность этого подхода значительно выше, чем у gdal2tiles.py, но мне интересно, использую ли я GDAL напрямую, если не смогу сделать его еще быстрее. Кто-нибудь может предложить аналогичный рабочий процесс с методами GDAL?

РЕДАКТИРОВАТЬ: После некоторых исследований сегодня, я нашел ответ прямо перед собой. Если вы загрузили FWTools, папки csharp \ apps содержат ряд классов для демонстрации привязок C # GDAL. В моем случае GDALRead.cs и GDALReadDirect.cs были тем, что я искал.

user890
источник
2
@vadp, @markusn, @mapperz и все остальные - пожалуйста, будьте понятны. В дополнение к ссылке предложение или два относительно того, почему вы считаете, что этот инструмент стоит посмотреть и что отличает его от других, будет полезным. Мы хотим, чтобы ответ был полезным как в будущем, так и сразу. Рано или поздно наступает звено гниения, и если все, что у нас есть, это URL, то трудно найти место, в котором будет воплощен проект.
Мэтт Вилки
4
Привет, user890, не могли бы вы опубликовать свое окончательное решение вопроса и отметить его как закрытое? в этом случае звучит так, будто использование привязок к конкретному языку дает вам необходимую производительность.
SCW
Я не могу добавить комментарий к своему собственному сообщению :( Но gdal_tiler.py также поддерживает многопроцессорную обработку, но очень грубо: он просто обрабатывает n источников одновременно. Тем не менее, это дает некоторый положительный эффект :)
Вадим

Ответы:

5

Кто-то потратил время на то, чтобы gdal2tiles.py использовал несколько процессоров: параллельный gdal

Я использовал это, и это, кажется, работает. Он успешно использует все 4 ядра до 100% и сокращает общее время создания тайлов до 1/4 от первоначального времени.

hazzey
источник
Вы можете проверить gdal2tiles_parallel.py gitlab.com/GitLabRGI/geopackage-python . Я предпочитаю comme
GeospatialInformationTech
2

Ты пробовал это? http://www.klokan.cz/projects/gdal2tiles/

markusN
источник
Спасибо за комментарий, это в основном графический интерфейс для скрипта gdal2tiles.py, довольно медленный.
user890
1

В моей компании мы писали пользовательские скрипты на python, используя gdal_warp (это было до того, как мы узнали, что gdal2tiles существует). Это было быстрее, чем g2t, особенно когда мы переписали его для работы на многих ядрах (используя python threadpool). Кроме того, он производил плитки более высокого качества (интерполяция Ланцоша на g2t, кажется, работает плохо, в gdal_warp получающиеся плитки были удивительными).

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

stachu
источник
0

Другой вариант - использование TileCache (WMS-C). Хотя я никогда не использовал gdal2tiles, я не ожидал, что TileCache принесет улучшенную производительность.

В любом случае, следующие стратегии могут ускорить тайлинг:

  • Метатилирование, если используется TileCache (интересно, есть ли у gdal2tiles аналогичная функция).
  • Если растровые данные представляют собой большие ортофото, используйте такой формат, как ECW . Поскольку этот формат имеет частичную декомпрессию , с помощью этого формата вы можете получить значительный прирост производительности.
dariapra
источник
0

Сценарий gdal_tiler.py из http://code.google.com/p/tilers-tools может быть полезным вариантом.

Обычно он показывает очень хорошую производительность по сравнению с gdal2tiles.py и должен работать с любым источником GDAL (набор данных), в частности, он не требует преобразования набора данных источника в RGB.

Вадим
источник
-1

Gdal2tiles_parallel https://gitlab.com/GitLabRGI/erdc/geopackage-python Если геопакет или MBTILES, то не требуется Python, который изначально выполняется с помощью gdal_translate.EXE. вам также нужно запустить gdaladdo, чтобы добавить более одного уровня масштабирования. Я также использую Qtiles / Qmetatiles для рабочего стола QGIS. Тем не менее ничто не может конкурировать с Maptiler Pro коммерческого программного обеспечения. Если вам нужна папка тайлов, просто конвертируйте MBTILES в TMS ИЛИ XYZ с помощью Python mbUtil

GeospatialInformationTech
источник
Ссылка больше не работает
AndrewHarvey