A ferramenta Criar ponto aleatório é capaz de gerar um certo número de pontos nos polígonos. Gostaria de saber, dada uma caixa delimitadora, existe alguma maneira de gerar pontos aleatórios fora desses polígonos?
A ferramenta Criar ponto aleatório é capaz de gerar um certo número de pontos nos polígonos. Gostaria de saber, dada uma caixa delimitadora, existe alguma maneira de gerar pontos aleatórios fora desses polígonos?
Respostas:
Pessoalmente, não gosto do algoritmo de ponto aleatório no ArcGIS. Como alternativa, use agenrandompnts
função GME ( Geospatial Modeling Environment ) . Você poderá identificar polígonos específicos onde os pontos aleatórios serão excluídos (consulte a área destacada em .jpg em anexo). O melhor de tudo é que este software é gratuito.
O GME fornece a você um conjunto de ferramentas de análise e modelagem, que variam de pequenos 'blocos de construção' que você pode usar para criar um fluxo de trabalho sofisticado a programas de análise completamente independentes. Ele também usa o software de código aberto extraordinariamente poderoso R como o mecanismo estatístico para conduzir algumas das ferramentas de análise. Um dos muitos pontos fortes do R é que ele é de código aberto, completamente transparente e bem documentado: características importantes para qualquer software analítico científico.
Você precisará criar um polígono de rosca, com o orifício da rosca representando o espaço interno não pontual e alguma extensão espacial representando a área delimitadora da área poligonal.
Desculpe, eu simplesmente não consigo resistir. Como é sempre bom saber o que está acontecendo sob o capô com algo como GME, aqui está uma solução no código R real.
require(sp)
require(rgeos)
# Create example polygon data
x <- readWKT("POLYGON ((0 0, 0 10, 10 10, 10 0, 0 0))")
y <- readWKT("POLYGON ((3 3, 7 3, 7 7, 3 7, 3 3))")
# Calculate difference in polygon geometries to create null polygon
d <- gDifference(x,y)
# Create random sample in non-null polygon
rs <- spsample(d, 20, type="random")
# Plot results
plot(d, col="red")
plot(rs,pch=19,col="black",add=TRUE)
Essa abordagem provavelmente é muito diferente de como o GME faz isso, mas está usando classes espaciais R sp nativas e uma biblioteca de topologia bastante nova, tornando o código muito eficiente. Isso também fornece um exemplo que pode ser facilmente envolvido em um loop for.