Lesen Sie nur einen Teil eines ESRI-Shapefiles in R.

9

Ich habe ein sehr großes ESRI-Shapefile (> 8000 Polygone, .shp-Datei ist> 32 MB), das ich unter Windows 7 in R einlesen möchte.

Ich bin mit rgdal und readOGR () vertraut. Bei dieser Größe des Shapefiles ist das Einlesen des gesamten Shapefiles in den Speicher jedoch ein sehr langsamer Prozess. Darüber hinaus interessieren mich nur einige wenige Cluster-Polygone (<100) der 8.000, die im Shapefile enthalten sind. Der Prozess, für den ich dies tun muss, ist sehr repetitiv, dh das Shapefile muss viele Male geladen werden, daher ist es derzeit sehr langsam.

Daher frage ich mich, ob es möglich ist, nur einen Teil des Shapefiles einzulesen, um den Prozess zu beschleunigen. Es erscheint unpraktisch, eine so große Datenmenge zu laden und dann das meiste davon zu verwerfen.

bmz
quelle
Welche Plattform benutzt du? Wenn Sie Zugriff auf ArcGIS haben, können Sie vermutlich in ArcPy ein Skript erstellen, das die Auswahl der Teilmenge vornimmt und dann einen R-Prozess über das Python-Skript ausführt. Dies ist definitiv möglich ... Führen Sie eine Google-Suche aus, um R-Code aus Python auszuführen.
GeoJohn
3
Vielleicht versuchen Sie, den Teil Ihrer Daten, der für Sie wichtig ist, in ein neues Shapefile zu exportieren, und arbeiten Sie dann in R.
ami
es wird wahrscheinlich mit sf funktionieren. Speichern Sie es jedoch mit saveRDS im R-Arbeitsbereichsformat. Es gibt Möglichkeiten, generisch in SQLite oder ähnlichem zu speichern, aber ich bezweifle, dass dies erforderlich ist
mdsumner

Antworten:

7

Das einzige, was mir in den Sinn kommt, ist die Nutzung der neuen "sfr" -Bibliothek und der zugehörigen einfachen Feature-Class für die Teilmenge. Die sfr-Bibliothek ist derzeit auf GitHub verfügbar. Hier finden Sie ein Tutorial , mit dem Sie beginnen können.

Ich glaube nicht, dass Sie Daten basierend auf einer Teilmengenabfrage streamen können, dies würde jedoch die Lesezeiten erheblich beschleunigen und ist angeblich die Zukunft von R-Raumklassen .

Eine andere Möglichkeit wäre, Ihre Geodaten in einer Datenbank (z. B. PostGIS) zu speichern und aus der Datenbank abzufragen. Dies kann eine äußerst effiziente Möglichkeit sein, mit großen Datenmengen umzugehen.

Jeffrey Evans
quelle
2
Das sfPaket ist auf CRAN seit Version 0.2 (26.10.2016) verfügbar
rcs
1

Ich denke, dass die Verwendung eines GIS wie QGIS und die Auswahl der benötigten Funktionen ein guter Ansatz wäre.
Wenn Sie die Ergebnisse wieder zusammenführen müssen, können Sie eine Datei mit den 7900 Polygonen erstellen, die Sie nicht verarbeiten möchten, dann die 100 Polygone verarbeiten und nach der Verarbeitung wieder verbinden.

MichaelStoner
quelle
0

Mit dem folgenden org2ogrBefehl können Sie eine Teilmenge eines Shapefiles erstellen :

ogr2ogr wählt Features nach Attributen aus

Sie müssen jedoch eine Bedingung für die Auswahl der gewünschten Funktionen herausfinden.

Spacedman
quelle