Warum ist GDALPolygonize so viel langsamer als ArcGIS Raster to Polygon?

9

Ich versuche, ein Raster mit GDALPolygonize () in einem Python-Skript zu polygonisieren. Das Skript begann gestern um 17 Uhr mit der Polygonisierung und wird jetzt um 9:30 Uhr noch polygonisiert. Ich habe keine Ahnung, wie weit es ist, aber ich weiß, dass es noch geht, denn wenn ich meinen Windows Explorer aktualisiere, kann ich sehen, wie sich die Dateigröße für das Ausgabe-Shapefile ändert.

Mein Raster ist ziemlich groß, aber ich erwarte immer noch nicht, dass es so lange dauert. Mein Raster besteht aus 35.486 Spalten und 23.682 Zeilen mit einer Zellengröße von 1 Meter. Es ist ein binäres Raster, bei dem der Wert 1 Daten und 0 NoData darstellt.

Bei der Polygonisierung in ArcGIS mithilfe von Raster zu Polygon in der Konvertierungs-Toolbox dauerte es 56 Sekunden. Das resultierende Shapefile ist 200 MB groß, während das von GDALPolygonize noch erstellte Shapefile nur noch 100 MB groß ist. Das lässt mich denken, dass GDAL nach der ganzen Nacht ungefähr zur Hälfte fertig ist.

Technische Daten: Windows 7 64-Bit, 8 GB RAM, GDAL 1.10 64-Bit, ArcGIS Desktop 10.2, 64-Bit-Hintergrund-Geoverarbeitung für ArcGIS Desktop, Python 2.7.3 64-Bit

UPDATE Tag 2 - GDALPolygonize läuft noch. Es hat über Nacht 2 Nächte hintereinander und einen ganzen Tag ohne Abschluss gegangen. ArcGIS dauerte 56 Sekunden.

Brian
quelle
schnelles Update von 2018: gdal_polygonize dauert immer noch viel mehr als 56 Sekunden. Ich habe ein Raster von 12000x12000 und gdal arbeitet seit über einer Stunde. Es ist nicht viel im Vergleich zu Tagen, aber es ist mehr als 60 Mal mehr als 56 Sekunden, also habe ich das Gefühl, dass ich mir einen laufenden Prozess ansehen werde, wenn ich morgen früh zurückkomme, um meine Maschine zu überprüfen.
Thymaro

Antworten:

4

Ich habe die gleiche Erfahrung. Der Algorithmus ist für große Raster sehr langsam, für kleinere jedoch recht schnell. Es gibt eine mögliche Problemumgehung:

  1. Teilen Sie große Rasterdateien von gdalwarp in kleinere Dateien auf (verwenden Sie -te, um den Umfang für jede Datei zu definieren):

gdalwarp -te 12.08 48.5 12.5 51.1 original_file.tif part1.tif

  1. Polygonisieren Sie jedes von ihnen in ein separates Shapefile:

gdal_polygonize.py part1.tif -f "ESRI Shapefile" part1.shp

  1. Shapefiles zusammenführen:

ogr2ogr -f "ESRI Shapefile" -update -append merge.shp part1.shp -nln merge

  1. Löse das neue Shapefile auf:

ogr2ogr "output.shp" "input.shp" -dialect sqlite -sql "SELECT ST_Union(geometry), field FROM input GROUP BY field"

Ich weiß, es ist verdammt verrückt, aber das letzte Mal war viel schneller.

Stanley

Stanislav Dušek
quelle
1
Sie könnten dies wahrscheinlich in ein Skript
packen,
Hallo Stanley, danke für diese Antwort. Ich versuche etwas Ähnliches zu tun, weil meine Raster ewig brauchen, um zu polygonisieren. Fügt diese Methode die Polygone an den Kanten wieder zusammen, als ob Sie die Raster überhaupt nicht geteilt hätten? Könnten Sie die SQL-Anweisungen im letzten Befehl erweitern? Ich kenne SQL nicht und versuche herauszufinden, wie dies mit meinen Daten funktioniert.
user20408
Könnten gdalwarpSie Ihr Raster nicht einfach verwenden , indem Sie beim Speichern eine vrt-Datei erstellen, anstatt sie zu verwenden? Zumindest habe ich so gelernt, meine Raster zu zerschneiden, und ich muss es nicht für jede Kachel einzeln tun.
Thymaro