Ich habe eine große Rasterdatei (129600 x 64800 Pixel) mit globalen Gewässern (1-Bit-Werte 0 und 1) und versuche, Ozean- und Binnenwasserküsten zu extrahieren.
Ich habe mit ArcGIS und QGIS versucht, von Raster zu Polylinie zu konvertieren, aber es dauert ewig.
Kennt jemand einen besseren / schnelleren Weg (Python oder R) oder ein besseres Werkzeug für diese Aufgabe?
Aktualisieren
- R: rasterToContour ist zwar schnell und präzise, aber wenn Sie einen sehr großen Datensatz wie meinen haben (8.398.080.000 Pixel), benötigen Sie entweder sehr viel RAM (mehr als 16 GB) oder Sie erzwingen, dass R mehr Daten auf der Festplatte verarbeitet wird auch ewig dauern.
- Python / GDAL: gdal_poligonize erstellt Polygone anstelle von Polylinien
Update 2
- R rasterToContour: rasterToContour liefert nicht die gewünschten Ergebnisse. Im Vergleich zu ArcGIS (Raster zu Polygon gefolgt von Feature zu Linie) wird der genaue Pixelumriss nicht extrahiert, wie in den folgenden Beispielen gezeigt.
UPDATE 3
Python / GDAL: Ich habe gdal_polygonize über die Befehlszeile für ArcGIS in einem Test-Dataset ausgeführt und die Ergebnisse waren äußerst klar:
- gdal: 49 sekunden
- ArcGIS: 1,84 Sekunden
python
r
performance
Generisches Wevers
quelle
quelle
Antworten:
Ich arbeite mit R und habe
rasterToPolygons
dasraster
Paket in der Vergangenheit benutzt, aber jetzt bevorzuge ich esgdal_polygonizeR
von John Baumgartner. Es basiert aufgdal_polygonize.py
und ist viel schneller. John Baumgartner veröffentlichte den Code und gab ein Beispiel für die Verwendung in seinem Blog .Wenn Sie mit Python vertraut sind, können Sie es
gdal_polygonize.py
natürlich auch direkt verwenden.quelle
Für die Nachwelt habe ich Erfolg mit dem bereits mit
stars::
Paket inR
für diese Art der Operation schnell zu tun.quelle
Versuchen Sie es
rasterToContour
aus dem Raster- Paket.Anschließend können Sie die Dateien einfach in einen lokalen Ordner schreiben, z. B. als 'ESRI Shapefile' (.shp). Verwenden Sie dazu den folgenden Code. Werfen Sie einen Blick auf
ogrDrivers
von rgdal , um herauszufinden , welche Treiber Ihr System ist kompatibel mit.quelle
rasterToContour
auf einen höheren Wert einzustellen , z. B. 1e + 9. Sie werden dann mit mehr Details enden. Die Standardeinstellung erzeugt ziemlich verallgemeinerte Konturlinien.resample
Ihre Daten in einer gröberen räumlichen Auflösung zu speichern, kann ich mir nur vorstellen, dass Sie Ihre Daten in mehrere Kacheln (z. B. 16 Sub-Raster) aufteilen und diese dannrasterToContour
iterativ und separat bearbeiten Schließlich werdenmerge
die resultierenden Shapefiles zu einem riesigen Shapefile. Bei Interesse bietet das Rsenal -Paket unserer Arbeitsgruppe eine FunktionsplitRaster
zum Erstellen mehrerer Sub-Raster aus einem riesigen Raster.Obwohl ich ein großer Fan von GDAL bin, war das Polygonisierungs-Tool auch für meine Anwendungen viel zu langsam.
Eine schnelle Alternative ist
gdal_trace_outline
von Dans GDAL Skripten , die auch mehr Möglichkeiten in Bezug auf Toleranz hat, Donuts, usw.Auf
gdal_polygonize
diese Weise werden auch Polygone erstellt, mit denen Sie anschließend konvertieren müssenogr2ogr -nlt MULTILINESTRING
.Nachteil ist, dass Sie es selbst kompilieren müssen, es sei denn, Sie verwenden ein Linux- oder Mac-OsX-System.
quelle