Geschichtetes Zufallsstichprobenwerkzeug

9

Gibt es eine Möglichkeit, eine bestimmte Anzahl von zufälligen Punkten über verschiedene Klassen in einem Raster in QGIS zu erzeugen? Ich habe Erweiterungen wie GRASS oder GDAL, ...

Stophface
quelle
Ich habe keine Antwort, aber irgendwie. Vermutlich mit r oder Python, aber im Moment habe ich nicht den besten Weg gefunden, dies zu tun. Ich bin sehr interessant durch Antwort. Beste
Cédric Lardeux
1
Sie können dies einfach mit dem v.random-Befehl von GRASS GIS 7 tun: siehe grass.osgeo.org/grass72/manuals/…
markusN
Sie können auch zufällige Punkte als Raster direkt mithilfe r.randomdes Teils "Über verschiedene Klassen" generieren und selbst herausfinden. Daher können Sie die Hin- und Rückkonvertierung
Nikos Alexandris

Antworten:

6

Es ist möglich, wenn Sie Ihr Raster in eine Vektorebene konvertieren.

Ein kurzes Beispiel ausgehend von diesem Klassifizierungsraster:

Geben Sie hier die Bildbeschreibung ein

Verwenden Raster > Conversion > PolygonizeSie diese Option , um sie in eine Vektorebene zu konvertieren:

Geben Sie hier die Bildbeschreibung ein

Wenn Sie Punkte über eine ganze Klasse (und nicht über jeden einzelnen "Patch") erstellen möchten, verwenden Sie das Vector > Geometry Tools > Singleparts to MultipartsTool.

Gehen Sie dann zu Vector > Research Tools > Random Points, wählen Sie die vorherige Vektorebene aus Input Boundary Layerund aktivieren Sie die Use this number of pointsOption, wenn Sie in jeder Klasse die gleiche Anzahl von Punkten erstellen möchten:

Geben Sie hier die Bildbeschreibung ein

Wenn Sie die Anzahl der Punkte abhängig von der Klasse ändern möchten, fügen Sie der Attributtabelle der Polygonebene eine Spalte hinzu, in der Sie die Anzahl der Punkte für jede Klasse angeben, und aktivieren Sie dann die Use value from input fieldOption (anstelle von Use this number of points) in den Zufallspunkten Werkzeug.

Geben Sie hier die Bildbeschreibung ein Geben Sie hier die Bildbeschreibung ein

ArMoraer
quelle
1
Es gibt keinen Weg, eine Vektorebene zu erstellen? Es scheint, als wäre viel Rechenleistung erforderlich, wenn das Raster sehr groß ist (es in einen Vektor umwandeln) ...
Stophface
Nur so kann ich mir vorstellen ... Vielleicht kommt jemand mit einer anderen Lösung, aber ich glaube nicht, dass dieser Schritt vermieden werden kann.
ArMoraer
Hm, es ist wie ich dachte. QGIS beendet die Berechnung nicht. Ich kann polygonisieren, aber das singleparts to multipartsBit funktioniert nicht ... Es stürzt ab
Stophface
Sie können alternativ das Auflösungswerkzeug ausprobieren. QGIS native Dissolve ist möglicherweise sehr langsam, sodass Sie Dissolve polygonsstattdessen das OGR- Tool ausprobieren können (Sie finden es in der Verarbeitungs-Toolbox).
ArMoraer
Ich habe es auch versucht. Gleiche Ergebnisse ... Wie gesagt: Das Polygon, das ich nach dem Polygonisieren meines Rasters erhalte, ist sehr, sehr groß. Ich war überrascht, dass das Polygonisieren funktionierte ...
Stophface
3

Wie ich schrieb: Mit einem großen Raster funktioniert es nicht, das Raster in einen Vektor umzuwandeln und dann ein einzelnes Teil in mehrere Teile aufzulösen. Es gibt eine einfachere Möglichkeit, das Sample mithilfe von direkt auf das Raster zu übertragen R.

library(raster)
library(rgdal)

# read a raster, GeoTiff or something
forSampling <- raster(someRaster.tif)

# make stratified random sampling
# set sp = TRUE to get a spatialPointsDataframe
# that one can easily be converted into a shapefile
sampleSp <- sampleStratified(x = forSampling, size = 50, xy = TRUE, sp = TRUE)

# write it out to a shapefile for further processing
writeOGR(obj = sampleSp, dsn = "aa", layer = "sampleSp", driver="ESRI Shapefile") # this is in geographical projection
Stophface
quelle