Ich möchte einen Punktvektordatensatz mit 10000 Punkten (oder mehr) in einem binären Raster erstellen, wobei die Punkte auf Bereiche beschränkt werden sollten, in denen der Rasterwert 1 ist.
Ich habe die folgenden Schritte versucht.
- Raster polygonisieren
- QGIS: Vektor -> Recherchetools -> Zufällige Punkte
Dies funktioniert bis zu 2000 Punkten, aber alles, was darüber liegt, führt nur zum Absturz von QGIS.
Gibt es eine Möglichkeit, ein Vektordatensatz mit einer großen Anzahl von Punktmerkmalen zu erstellen, die durch ein binäres Raster (oder die polygonisierte Version davon) eingeschränkt werden?
Die folgenden Tools stehen mir zur Verfügung, von den günstigsten bis zu den ungünstigsten: QGIS, Python, R, ArcGIS
Dies ist, was ich will, nur mit 10x der Punktfunktionen.
qgis
arcgis-desktop
python
r
point-in-polygon
Kersten
quelle
quelle
Antworten:
Hier ist ein Weg in R:
Machen Sie ein Testraster, 20x30 Zellen, machen Sie 1/10 der Zellen auf 1 gesetzt, zeichnen Sie:
Für ein vorhandenes Raster in einer Datei, z. B. ein geoTIFF, können Sie einfach Folgendes tun:
Holen Sie sich nun eine Matrix der xy-Koordinaten der 1 Zellen, zeichnen Sie diese Punkte auf und wir sehen, dass wir Zellzentren haben:
Schritt 1. Generieren Sie 1000 (xo, yo) Paare, die in einem Feld von der Größe einer einzelnen Zelle auf 0 zentriert sind. Beachten Sie die Verwendung von
res
, um die Zellengröße zu erhalten:Schritt 2. Ermitteln Sie, in welche Zelle sich jeder der oben genannten Punkte befindet, indem Sie 1000 Werte von 1 bis zur Anzahl von 1 Zellen zufällig auswählen:
Berechnen Sie abschließend die Koordinate, indem Sie die Zellmitte zum Versatz hinzufügen. Grundstück zu überprüfen:
Hier sind 10.000 Punkte (ersetzen Sie die 1000 oben durch 10000), dargestellt mit
pch="."
:Ziemlich augenblicklich für 10.000 Punkte auf einem 200x300- Raster mit der Hälfte der Punkte als Eins. Wird mit der Zeit linear mit der Anzahl der Raster zunehmen, denke ich.
Um als Shapefile zu speichern, konvertieren Sie es in ein
SpatialPoints
Objekt, geben Sie ihm die richtige Koordinatensystemreferenz (die gleiche wie Ihr Raster) und speichern Sie:Dadurch wird ein Shapefile erstellt, das die Zellennummer und die Offsets als Attribute enthält.
quelle
Wenn ich mit großen Datenmengen arbeite, führe ich gerne Tools / Befehle außerhalb von QGIS aus, z. B. über ein eigenständiges Skript oder über die OSGeo4W-Shell . Nicht so sehr, weil QGIS abstürzt (selbst wenn "Nicht reagiert" angezeigt wird, werden wahrscheinlich immer noch die Daten verarbeitet, die Sie im Task-Manager überprüfen können ), sondern weil mehr CPU-Ressourcen wie RAM zur Verarbeitung der Daten verfügbar sind. QGIS selbst verbraucht ziemlich viel Speicher, um ausgeführt zu werden.
Um ein Tool außerhalb von QGIS auszuführen ( Sie müssten QGIS über das OSGeo4W-Installationsprogramm installiert haben ), befolgen Sie die ersten beiden Schritte, wie von @gcarrillo in diesem Beitrag beschrieben: Problem beim Importieren von qgis.core beim Schreiben eines eigenständigen PyQGIS-Skripts (Ich schlage vor, seine .bat-Datei herunterzuladen und zu verwenden).
Sobald die Pfade festgelegt sind, geben Sie
python
in die Befehlszeile ein. Kopieren Sie der Einfachheit halber den folgenden Code in einen Texteditor wie Notepad, bearbeiten Sie die Parameter wie den Pfadnamen Ihres Shapefiles usw. und fügen Sie das Ganze mit der rechten Maustaste> Einfügen in die Befehlszeile ein :Mit dem Skript habe ich das Werkzeug Zufällige Punkte in Ebenengrenzen für ein ziemlich großes Shapefile ausgeführt und es dauerte weniger als 20 Sekunden, um 10.000 Punkte zu generieren. Das Ausführen in QGIS dauerte fast 2 Minuten. Zumindest für mich gibt es einen signifikanten Unterschied.
quelle
Sie können GRASS GIS auch direkt für diesen Job verwenden - Geschichtete Zufallsstichprobe: Zufallsstichprobe aus einer Vektorkarte mit räumlichen Einschränkungen :
https://grass.osgeo.org/grass72/manuals/v.random.html#stratified-random-sampling:-random-sampling-from-vector-map-with-spatial-constraints
Zusätzlich werden im Befehl Zufallsstichproben aus der Vektorkarte nach Attributen und einige andere Methoden implementiert.
Hinweis: Die in QGIS durch Verarbeitung bereitgestellte v.random-Version spiegelt nicht die volle Funktionalität wider, sondern nur eine vereinfachte Ansicht.
quelle