Outil d'échantillonnage aléatoire stratifié

9

Existe-t-il un moyen de produire un certain nombre de points aléatoires sur différentes classes dans un raster dans QGIS? J'ai des extensions comme GRASS ou GDAL, ...

Stophface
la source
Je n'ai pas de réponse mais d'une certaine façon. Utilisant correctement r ou python mais pour l'instant je n'ai pas trouvé la meilleure façon de le faire. Je suis très intéressant par réponse. Meilleur
Cédric Lardeux
1
Vous pouvez le faire facilement avec la commande v.random de GRASS GIS 7: voir grass.osgeo.org/grass72/manuals/…
markusN
Vous pouvez également générer des points aléatoires en tant que raster en utilisant directement r.randomet comprendre vous-même la partie "sur différentes classes". Par conséquent, vous pouvez éviter les conversions aller-retour du raster au vecteur, etc. Voir grass.osgeo.org/grass72/manuals/r.random.html
Nikos Alexandris

Réponses:

6

Cela est possible si vous convertissez votre raster en couche vectorielle.

Exemple rapide, à partir de ce raster de classification:

entrez la description de l'image ici

Utilisez-le Raster > Conversion > Polygonizepour le convertir en couche vectorielle:

entrez la description de l'image ici

Si vous souhaitez créer des points sur une classe entière (et non sur chaque "patch" séparé), utilisez l' Vector > Geometry Tools > Singleparts to Multipartsoutil.

Ensuite, allez dans Vector > Research Tools > Random Points, sélectionnez la couche vectorielle précédente Input Boundary Layeret cochez l' Use this number of pointsoption si vous souhaitez créer le même nombre de points dans chaque classe:

entrez la description de l'image ici

Si vous souhaitez modifier le nombre de points en fonction de la classe, ajoutez une colonne à la table attributaire de la couche de polygones dans laquelle vous spécifierez le nombre de points pour chaque classe, puis cochez l' Use value from input fieldoption (au lieu de Use this number of points) dans les points aléatoires outil.

entrez la description de l'image ici entrez la description de l'image ici

ArMoraer
la source
1
il n'y a aucun moyen de créer un calque vectoriel? il semble que beaucoup de puissance de calcul soit nécessaire si le raster est très gros (le convertir en un vecteur) ...
Stophface
C'est la seule façon dont je peux penser ... Peut-être que quelqu'un viendra avec une autre solution, mais je ne pense pas que cette étape puisse être évitée.
ArMoraer
Hm, c'est comme je le pensais. QGIS ne termine pas le calcul. Je peux polygoniser, mais le singleparts to multipartsbit ne fonctionne pas ... Il plante
Stophface
Vous pouvez également essayer l'outil Dissoudre. La fusion native de QGIS peut être très lente, vous pouvez donc essayer l' Dissolve polygonsoutil OGR à la place (vous le trouverez dans la boîte à outils de traitement).
ArMoraer
j'ai essayé celui-là aussi. Même résultat ... Comme je l'ai dit: le polygone que je reçois après la polygonisation de mon raster est très très grand. J'ai été surpris que la polygonisation fonctionne ...
Stophface
3

Comme je l'ai écrit: Avec un grand raster, la transformation du raster en vecteur puis la dissolution d'une seule partie en plusieurs parties ne fonctionne pas. Il existe un moyen plus simple d'obtenir l'échantillon directement sur le raster à l'aide de 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
la source