Ferramenta de amostragem aleatória estratificada

9

Existe uma maneira de produzir uma certa quantidade de pontos aleatórios em diferentes classes em uma varredura no QGIS? Tenho extensões como GRASS ou GDAL, ...

Stophface
fonte
Eu não tenho resposta, mas de alguma maneira. Propably usando r ou python, mas por enquanto não encontrei a melhor maneira de fazê-lo. Eu sou muito interessante por resposta. Best
Cédric Lardeux 18/06/2016
1
Você pode fazer isso facilmente com comando GRASS GIS 7 de v.random: ver grass.osgeo.org/grass72/manuals/...
markusN
Você também pode gerar pontos aleatórios como um raster usando diretamente r.randome descobrir a parte "sobre diferentes classes". Assim, você pode evitar as conversões frente e para trás de raster para vetor, etc. Veja grass.osgeo.org/grass72/manuals/r.random.html
Nikos Alexandris

Respostas:

6

É possível se você converter sua varredura em uma camada vetorial.

Exemplo rápido, a partir desta classificação raster:

insira a descrição da imagem aqui

Use Raster > Conversion > Polygonizepara convertê-lo em uma camada vetorial:

insira a descrição da imagem aqui

Se você deseja criar pontos sobre uma classe inteira (e não sobre cada "patch" separado), use a Vector > Geometry Tools > Singleparts to Multipartsferramenta

Em seguida, vá para Vector > Research Tools > Random Points, selecione a camada vetorial anterior Input Boundary Layere marque a Use this number of pointsopção se desejar criar o mesmo número de pontos em cada classe:

insira a descrição da imagem aqui

Se você quiser alterar o número de pontos, dependendo da classe, adicione uma coluna à tabela de atributos da camada de polígono na qual especificará o número de pontos para cada classe e marque a Use value from input fieldopção (em vez de Use this number of points) nos Pontos aleatórios ferramenta.

insira a descrição da imagem aqui insira a descrição da imagem aqui

ArMoraer
fonte
1
não há como evitar a criação de uma camada de vetor? parece que é necessária uma grande quantidade de poder computacional se o raster é muito grande (convertê-la em um vetor) ...
Stophface
Essa é a única maneira que consigo pensar ... Talvez alguém venha com outra solução, mas não acho que essa etapa possa ser evitada.
ArMoraer
Hum, é como eu pensava. O QGIS não termina o cálculo. Posso polygonize, mas o singleparts to multipartsbit não funciona ... Ele trava
Stophface
Como alternativa, você pode tentar a ferramenta Dissolver. O Dissolve nativo do QGIS pode ser muito lento, portanto, você pode tentar a Dissolve polygonsferramenta OGR (você a encontrará na caixa de ferramentas de processamento).
ArMoraer
Eu tentei esse também. Mesmos resultados ... Como eu disse: O polígono que recebo após poligonizar minha varredura é muito, muito grande. Fiquei surpreso que o polygonize trabalhou ...
Stophface
3

Como escrevi: Com uma grande varredura, transformar a varredura em um vetor e depois dissolver uma parte em multipartes não funciona. Existe uma maneira mais fácil de obter a amostra diretamente na varredura usando 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
fonte