Geschwindigkeit verschiedener Rasterdatenformate


25

Ich habe Probleme, eine Diskussion oder ein vergleichendes Benchmarking verschiedener Rasterdateiformate zu finden (z. B. zur Verwendung bei der Datenanalyse in R). Hat jemand einen Einblick, warum bestimmte Formate schneller oder langsamer sein können? Oder sollten die Unterschiede minimal sein?

Insbesondere interessiert mich, ob die Konvertierung eines Rasters (z. B. einer GEOTIFF-Datei) in ein anderes Format (z. B. eine netCDF) jemals sinnvoll ist, um Lese- / Schreibvorgänge und andere Vorgänge zu beschleunigen.


2
Diese Frage ist für GIS relevant, aber ich vermute, dass Sie mit größerer Wahrscheinlichkeit Antworten auf SO erhalten, das eine starke Subcommunity von R-Experten hat. Wenn Sie keine schnelle Antwort erhalten, markieren Sie diese Frage, und ein Moderator migriert sie für Sie.
Whuber

Antworten:


9

Hier ist ein alter Blog-Artikel von mir, der sich mit der Dateigröße und der Zugriffszeit der Formate befasst. Ich habe nicht die Schreibgeschwindigkeit untersucht, sondern nur die Zugriffszeit. Ich würde sagen, sie wären wahrscheinlich direkt verwandt, könnten sich aber nicht dafür verbürgen.

Artikelzusammenfassung: Packbits bietet anscheinend die besten Zugriffszeiten (auf Kosten des Speicherplatzes), wohingegen Deflate mittlere / langsame Zugriffszeiten für mittlere / kleine Dateien bietet. Sie können die Zugriffszeiten auch empirischer testen, indem Sie Miniaturansichten in verschiedenen Größen erstellen und festlegen, wie lange dies dauert. Beispielbefehl:time gdal_translate -outsize <thumbnail dimensions> -of GTiff <compressed image file> <thumbnail file>

Unter der Annahme, dass in diesem Fall für R nur relevant ist, wie schnell es Daten aus der Datei lesen kann, wie es bei jedem anderen Prozess der Fall wäre, sollte dies ein guter Hinweis sein.


+1 für den verlinkten Artikel, aber die wichtigen Informationen sind extern und gehen für uns verloren, wenn diese Seite jemals herunterfällt oder sich bewegt. Ich schlage vor, eine zusammenfassende Zusammenfassung des Artikels zu geben, damit die Leser für den Fall, dass die Seite nicht verfügbar ist, auch vorübergehend etwas haben, mit dem sie für zukünftige Forschungen und Überlegungen arbeiten können. Vielen Dank!
Matt Wilkie

Meinetwegen! Es scheint, dass Packbits Ihnen die besten Zugriffszeiten (auf Kosten des Speicherplatzes) bietet, während Deflate Ihnen mittlere / langsame Zugriffszeiten für mittlere / kleine Dateien bietet. Sie können die Zugriffszeiten auch empirischer testen, indem Sie Miniaturansichten in verschiedenen Größen erstellen und festlegen, wie lange dies dauert. Beispielbefehl: "time gdal_translate -outize <thumbnail dimensions> -of GTiff <komprimierte Bilddatei> <thumbnail file>"
R Thiede

1
Vielen Dank! Ich habe die Zusammenfassung in die Antwort selbst gefaltet, damit sie eigenständiger ist (siehe Link zum Bearbeiten unten links bei jeder Antwort / Frage).
Matt Wilkie

@RThiede hatte ein berechtigtes Anliegen: Scheint es in der Tat jetzt, dass der Link zum Blog nicht mehr gültig ist?
Matifou

@RThiede Dein Link ist tot. Kannst du einen neuen bereitstellen?
Majid Hojati

6

Bei Lese- / Schreibvorgängen können Sie die Geschwindigkeit dieser Vorgänge mit system.time () testen. Hier sind einige Ergebnisse aus dem Laden einer DEM-Datei in R (Raster-Paket), die in vier Formate übersetzt wurde (ASCII, IMG und TIF ohne Komprimierung und Deflate). Beispiel für ein Raster mit ~ 26 MB:

> system.time(dem <- raster("~/workspace/TEMP/kideporegion.img"))
 user  system elapsed 
 0.154   0.002   0.157 

'Elapsed' gibt die Gesamtzeit (Sekunden) an, die für den Vorgang benötigt wird. Führen Sie die Operationen jeweils 10 Mal aus und betrachten Sie die durchschnittlich verstrichene Zeit:

              mean   diff
ASC         0.2237 0.3317
IMG         0.1544 0.0318
tif-Deflate 0.1510 0.0099
tif-none    0.1495 0.0000
tif-pack    0.1513 0.0118

TIFF ohne Komprimierung ist am schnellsten ... gefolgt von Deflate (0,1% langsamer) und TIFF-Packbits (1,8% langsamer), dann IMG (3,2% langsamer) und ASC (33% langsamer). (Dies ist auf einem Macbook Pro 2,4 GHz mit einer SSD, also schnelle Festplattenoperationen)

Dies ist einfach, um die Dateien zu laden, nicht um sie zu manipulieren.


4

Vielleicht ist es wirklich keine Frage, welches Rasterbildformat bessere Öffnungsbenchmarks aufweist - vielmehr sind welche Rasterbildformate die effizientesten Rasterquellenformate zum Öffnen und Lesen als Eingabe in ein numerisches R-Array. Und anschließend: Was ist das effizienteste Ausgabeformat von R, vorausgesetzt, Sie geben die Ergebnisse zurück in das Raster.

In beiden Fällen werden Sie, wenn Sie mit Raster in R arbeiten, wahrscheinlich die Pakete rgdal und R ncdf verwenden , um den Inhalt des R- Raster- Pakets zu ergänzen . Hauptsächlich abhängig vom Befehl gdalwarp . Sie müssen dort die Formatabhängigkeiten ermitteln, um eine Rasterauswahl treffen zu können. Sie finden ein gutes Stück Berichterstattung über SO und verschiedene OSGEO- und R-Foren / Blogs / Wikis.

Da es sich jedoch um ein GIS-Forum handelt, in dem die Verwendung von Python relativ aufsteigend ist, wird darauf hingewiesen, dass die Arbeit mit Rasterdaten in einem Python-Numpy-Array Vorteile mit sich bringt, wobei das Laden, Konvertieren und Exportieren von Rastern in ähnlicher Weise von den gdal-Bibliotheken abhängt. Einige Leute finden Speicherverwaltung und Codestruktur in Python besser als in nativem R - schauen Sie sich vielleicht RPy2 oder PypeR an, da dies für Ihre Analyse geeignet sein könnte.


Zum Bearbeiten von netCDF-Daten (Rasterquelle oder anderweitig) in R finden Sie hier Links zu zwei von R CRAN gehosteten netCDF-Paketen, ncdf4-cran.r-project.org/web/packages/ncdf4/index.html und RNetCDF- cran. r-project.org/web/packages/RNetCDF/index.html
V Stuart Foote

4

Eine große Frage ist, ob Sie das gesamte Raster aus der Datei vor der Verarbeitung in den Speicher lesen oder ob die Datei so groß ist, dass Sie sie inkrementell verarbeiten oder eine Teilmenge der Gesamtdatei verarbeiten.

Wenn Sie alles in den Speicher laden, erfolgt der Zugriff zumeist sequenziell, und das schnellste Format ist eine Aufteilung zwischen normalem und komprimiertem Speicher (abhängig davon, wie schnell Ihre CPU im Vergleich zur Festplatte ist). Jedes der Binärdateiformate wird wahrscheinlich ziemlich ähnlich sein (ASCII wird langsamer sein).

Wenn Sie eine Teilmenge einer sehr großen Datei verarbeiten müssen, kann ein Format, in dem die gewünschte Teilmenge näher beieinander liegt, schneller sein, z. B .: Kacheln oder ein Format, in dem Offsets berechnet werden können. Manchmal gewinnen unkomprimierte Ansätze an Bedeutung, da es möglicherweise trivial ist, zu berechnen, wo sich ein bestimmter Teil des Bilds in der Datei befindet, insbesondere, wenn Sie nur einen Teil einer sehr großen Zeile benötigen, die Komprimierung jedoch auf granulare Weise erfolgen kann, die für einige gut geeignet ist Zugriffsmuster.

Tut mir leid, aber Sie müssen wahrscheinlich abhängig von Ihrem Zugriffsmuster einen Benchmark durchführen, anstatt eine Einheitsgröße zu erhalten. Dies hängt natürlich nicht nur vom Dateiformat und den oben genannten Faktoren ab, sondern auch von den Treibern für dieses Format und Ihrer Software.


2

Die Art und Weise, wie Sie über diese Art von Problemen nachdenken, hängt davon ab, wie Ihre Anwendung auf Ihre Datei zugreift und wie die Daten in Ihrer Datei angeordnet sind. Die Idee ist, dass wenn Sie nacheinander auf Ihre Daten zugreifen können, dies wesentlich effizienter ist, als wenn Sie nach dem Zufallsprinzip darauf zugreifen.

GeoTIFF ist eine Sammlung von 2D- "Bildern" oder Arrays. NetCDF ist ein Allzweckspeicher für mehrdimensionale Arrays. Wenn Sie die Arrays jedoch in netCDF auf die gleiche Weise wie in GeoTIFF speichern, erhalten Sie mehr oder weniger dieselbe Leistung.

Sie können die Daten auch in netCDF neu anordnen, um sie im Prinzip für Ihre Lesemuster zu optimieren. Ich vermute, dass die meisten GIS-Anwendungen für das GeoTIFF-2D-Layout optimiert sind, sodass eine Neuanordnung nicht viel bringt.

Schließlich würde ich sagen, dass es nur dann wirklich wichtig ist, wenn Sie sehr große Dateien haben, mindestens zehn Megabyte.


+1 für den Punkt, an dem der Direktzugriff oder das Lesen eines beliebigen Speicherorts sich stark von einem sequentiellen nach dem anderen unterscheidet, bis das Lesen der gesamten Datei abgeschlossen ist. Ich bin zwar nicht auf der Basis, aber ich denke, Geotiff unterstützt auch gekachelte Speicher und willkürlichen Zugriff. Es ist nur so, dass Strip / Row am häufigsten und am häufigsten unterstützt wird. Auch heutzutage liegen "sehr große Dateien" in GIS tendenziell im Multi-GB-Bereich. ;-)
matt wilkie

2

Ich habe vor einigen Jahren ein paar Seiten darüber gelesen und seitdem tiff mit Packbits-Komprimierung verwendet, mit einem Geotiff-Header gekachelt und war glücklich.

Artikel des Arcpad-Teams

wiki

Aber nachdem ich das Folgende gelesen habe, werde ich es mir noch einmal überlegen und vielleicht die Deflate-Variante verwenden.

Arcpad-Site


2

So viele Pakete verwenden GDAL unter der Haube, z. B. rgdal, QGIS, GRASS usw. Wenn ich eines dieser Pakete verwenden würde, würde ich darüber nachdenken, meine Bilder in vrt umzuwandeln. Ich habe oft gesehen, dass empfohlen wird, wenn Sie zwei GDAL-Befehle verwenden müssen, die Zwischendatei eine vrt-Datei sein sollte, da der Leseaufwand minimal ist (z. B. http://www.perrygeo.com/lazy-raster-processing) -mit-gdal-vrts.html ). Es hört sich so an, als ob Ihr Workflow lautet: Einmal konvertieren und mehrmals lesen. Vielleicht wäre vrt angebracht.

[Bearbeiten: Link angepasst]

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.