В чем разница между gdalwarp и gdal_merge для мозаики

14

Я хотел объединить около 20 файлов в формате 100 МБ каждый и использовал gdalwarp (я знаю о параметре виртуального файла):

gdalwarp $(list_of_tiffs) merged.tiff

Однако эта команда заняла очень много времени, и примерно через 15 минут она обрабатывала 5-е изображение из набора. Я прекращаю это.

Затем я обнаружил, что сценарий gdal_merge.py можно использовать также для создания мозаики, и попробовал его:

gdal_merge.py $(list_of_tiffs)

который завершен менее чем за 3 минуты.

Поскольку я ожидал, что обе команды приведут к одному и тому же результату, мне интересно, в чем разница между ними, почему gdalwarp занимает так много времени, если результат одинаков?

zetah
источник

Ответы:

21

Хотя я не знаю, почему GDAL обеспечивает такое совпадение в функциональности, обязательно установите кэш для gdalwarp, чтобы сделать его действительно быстрым:

# assuming 3G of cache here:
gdalwarp --config GDAL_CACHEMAX 3000 -wm 3000 $(list_of_tiffs) merged.tiff

Убедитесь, что вы не определили больше кеша, чем на компьютере.

markusN
источник
Я понятия не имел об этом переключателе настройки, который действительно ускоряет процесс. Для справки 3000 - 3 ГБ (дополнительная информация trac.osgeo.org/gdal/wiki/UserDocs/GdalWarp ) У меня есть сборка NumPy с MKL в моем системном Python, но все равно gdalwarpнужно делать что-то большее, поскольку NumPy не может быть быстрее, чем C реализация, хотя может достичь этого.
Зета
3000 действительно 3ГБ или 3072?
miln40
13

Я просто случайно наткнулся на этот вопрос и потенциальный ответ, когда искал что-то еще.

gdal_merge.py использует ресэмплинг ближайшего соседа. Если вы хотите контролировать использование передискретизации, вы должны использовать вместо этого gdalwarp.

источник: trac.osgeo.org

dhewlett
источник
5

gdal_merge.py загружает все файлы в память перед их обработкой. поэтому он не может обрабатывать большие файлы, если у вас мало памяти. смотрите здесь

joaoal
источник