¿Cuál es la diferencia entre gdalwarp y gdal_merge para mosaicizar?

14

Quería fusionar alrededor de 20 dem tiffs cada uno alrededor de 100 MB, y usé gdalwarp (sé sobre la opción de archivo virtual):

gdalwarp $(list_of_tiffs) merged.tiff

Sin embargo, este comando tardó mucho tiempo y, después de unos 15 minutos, estaba procesando la quinta imagen del conjunto. Lo termino.

Luego descubrí que el script gdal_merge.py también se puede usar para crear mosaicos y lo probé:

gdal_merge.py $(list_of_tiffs)

que se completó en menos de 3 minutos.

Como esperaba que ambos comandos produjeran el mismo resultado, me pregunto cuál es la diferencia entre los dos, ¿por qué gdalwarp tarda tanto tiempo si el resultado es el mismo?

zetah
fuente

Respuestas:

21

Si bien no sé por qué GDAL proporciona esta superposición en la funcionalidad, asegúrese de configurar el caché para gdalwarp para que sea realmente rápido:

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

Asegúrese de no definir más caché que tener RAM en la máquina.

markusN
fuente
No tenía idea sobre este interruptor de ajuste, que de hecho acelera el proceso. Para referencia 3000 es 3GB (más información trac.osgeo.org/gdal/wiki/UserDocs/GdalWarp ) Tengo NumPy compilado con MKL en mi sistema Python, pero aún gdalwarpdebo estar haciendo algo más, ya que NumPy no puede ser más rápido que C implementación, aunque puede alcanzarlo.
zetah
¿3000 es realmente 3GB o debería ser 3072?
miln40
13

Me encontré con esta pregunta y una posible respuesta cuando busco algo más.

gdal_merge.py utiliza el remuestreo de vecino más cercano. Si desea controlar el remuestreo utilizado, debe usar gdalwarp en su lugar.

fuente: trac.osgeo.org

dhewlett
fuente
5

gdal_merge.py carga todos los archivos en la memoria antes de procesarlos. por lo tanto, no puede procesar archivos grandes si su memoria es pequeña. mira aquí

joaoal
fuente