Was ist der Unterschied zwischen gdalwarp und gdal_merge beim Mosaizieren?

14

Ich wollte ungefähr 20 Dem-Tiffs mit jeweils ungefähr 100 MB zusammenführen und habe gdalwarp verwendet (ich kenne die Option für virtuelle Dateien):

gdalwarp $(list_of_tiffs) merged.tiff

Dieser Befehl dauerte jedoch sehr lange und verarbeitete nach 15 Minuten das fünfte Bild aus dem Satz. Ich beende es.

Ich fand dann heraus, dass das Skript gdal_merge.py auch zum Mosaizieren verwendet werden kann und probierte es aus:

gdal_merge.py $(list_of_tiffs)

die in weniger als 3min abgeschlossen.

Da ich erwartet hatte, dass beide Befehle dasselbe Ergebnis liefern würden, frage ich mich, was der Unterschied zwischen den beiden ist. Warum braucht gdalwarp so viel Zeit, wenn das Ergebnis gleich ist?

Zetah
quelle

Antworten:

20

Ich weiß zwar nicht, warum GDAL diese Überlappung in der Funktionalität bietet, aber stellen Sie sicher, dass Sie den Cache für gdalwarp so einstellen, dass er wirklich schnell ist:

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

Definieren Sie nicht mehr Cache als RAM auf dem Computer.

markusN
quelle
Hatte keine Ahnung von diesem Tuning-Schalter, der den Vorgang tatsächlich beschleunigt. Als Referenz ist 3000 3 GB groß (weitere Informationen finden Sie unter trac.osgeo.org/gdal/wiki/UserDocs/GdalWarp ). Ich habe NumPy mit MKL in meinem System-Python erstellt, gdalwarpmuss aber noch etwas mehr tun, da NumPy nicht schneller als C sein kann Implementierung, obwohl es erreichen kann.
Zetah,
ist 3000 wirklich 3GB oder sollte es 3072 sein?
miln40
12

Ich bin zufällig auf diese Frage gestoßen und auf eine mögliche Antwort, wenn ich nach etwas anderem gesucht habe.

gdal_merge.py verwendet das Resampling des nächsten Nachbarn. Wenn Sie die Kontrolle über das verwendete Resampling haben möchten, sollten Sie stattdessen gdalwarp verwenden.

Quelle: trac.osgeo.org

Dhewlett
quelle
5

gdal_merge.py lädt alle Dateien in den Speicher, bevor sie verarbeitet werden. Aus diesem Grund können keine großen Dateien verarbeitet werden, wenn der Arbeitsspeicher klein ist. siehe hier

joaoal
quelle