Criando pontos uniformemente distribuídos dentro de um limite irregular


8

Preciso criar uma série uniformemente distribuída de pontos dentro de uma série de polígonos de formas estranhas (anteriormente quadrados, mas agora quadrados com orifícios de rosca).

A maneira como resolvi esse problema até agora é criar uma rede de pesca do polígono e usar o centróide de cada unidade que a rede de pesca cria.

No entanto, o problema se tornou mais complexo e agora tenho polígonos mais complexos. Os centróides das unidades de rede de pesca não são mais suficientemente bons.

Eu estava tentando converter os polígonos em uma varredura e, em seguida, usar a ferramenta Dividir para rasters, e criar uma saída com um número especificado de unidades de área igual, mas isso não funcionará, pois meus dados vetoriais de entrada não têm os necessários valores para que o processo raster seja executado corretamente.

Estou trabalhando com o Arc 9.3 (mas também tenho acesso a vários outros pacotes de software)


3
"Distribuído uniformemente" pode significar várias coisas, inclusive espaçadas igualmente em uma grade predefinida, espaçadas igualmente em uma grade com origem aleatória (e talvez orientação aleatória), um ponto localizado aleatoriamente dentro de cada célula da grade, aleatoriamente uniforme (sem necessidade de grade) e mesmo aleatório, com tendência a evitar um ao outro. Você poderia ser mais específico sobre qual deles precisa?
whuber


@ whuber: Bem ... honestamente, não tenho certeza. Idealmente, os pontos seriam espalhados de tal maneira que a distância entre os pontos fosse igualada o máximo possível. Eles não precisam estar em uma grade perfeita. Isso seria uniformemente aleatório?
Kapjaki

São coisas sutis, mas não, equalizar as distâncias destrói grande parte da aleatoriedade. Garante que o conhecimento de um local torne o conhecimento de locais próximos muito mais previsível; em particular, a vizinhança (pequena) imediata de qualquer ponto será desprovida de outros pontos. Isso não é uniforme! Um bom lugar para começar quando se pensa em tais coisas é refletir sobre como os pontos serão usados. Se eles são para projetar coisas, como plantar árvores, distantes é ótimo. Se você vai fazer alguma análise estatística com eles, então cuidado!
whuber

@ Whuber: de fato, os meandros de que você fala são novos para mim. O objetivo disso é mostrar locais em potencial para poços de petróleo em uma determinada área. A aleatoriedade não é necessária, apenas a distância entre os pontos é maximizada e distribuída pelo menos de maneira uniforme pelo polígono delimitador.
Kapjaki

Respostas:


3

No QGIS, se você instalar o pacote fTools , há uma opção para gerar 'Pontos regulares' (Ferramentas -> Ferramentas de pesquisa -> Pontos regulares)

insira a descrição da imagem aqui


Isso produzirá uma grade de pontos, presumivelmente? E não é forçado a ficar dentro de um polígono ou conjunto de polígonos? (Isso não é uma crítica:. Um mais tarde pode remover todos os pontos situados fora de um polígono)
whuber

2
@whuber: Todos os pontos estão dentro do polígono especificado por "Camada de limite de entrada"
underdark

2

Você pode fazer isso no PostGIS com uma consulta mais ou menos assim:

SELECT grid.the_geom FROM 
(select st_setsrid(st_point(x, y), polygon_srid) AS the_geom from 
(select generate_series(minX, maxX, grid_size) AS x) AS a,
(select generate_series(minY, maxY, grid_size) AS y) AS b) AS grid,
polygon_table
WHERE ST_Within(grid.the_geom, polygon_table.the_geom);

Você pode experimentá-lo no postgisonline com este exemplo:

SELECT grid.the_geom FROM 
(select st_setsrid(st_point(x, y), 3021) AS the_geom from 
(select generate_series(130000, 142000, 500) AS x) AS a,
(select generate_series(260000, 270000, 500) AS y) AS b) AS grid,
lakes
WHERE ST_Within(grid.the_geom, lakes.the_geom);

Coloque a consulta acima na área de texto na parte superior e pressione o botão Map1. Você também pode escolher "lagos" na lista suspensa em segundo plano para ver o polígono usado para preencher os pontos.

/ Nicklas


O post de Nicklas parece estar no caminho certo. Existe uma maneira de especificar quantos pontos você deseja distribuir no lago thoguh? Estou procurando um método como esse há um tempo. Obrigado, Ray

Existe alguma maneira de criar 'blocos' a partir do polígono com base na divisão da área total igualmente? Ou seja, se 9 pontos forem desejados, divida o polígono em 9 'blocos' de área igual e obtenha os centróides com esses?
Kapjaki

Como o polígono pode ter qualquer forma estranha, acho que seria necessário algum algoritmo de tentativa e erro para conseguir isso.
Nicklas Avén

Isso parece funcionar bem. Infelizmente eu não entendo exatamente como posso usá-lo. Como faço para colocar meus próprios dados no cenário?
Kapjaki

@ Kapjaki, carregue seus polígonos em uma tabela postgis e, no meu primeiro exemplo, mude "olygon_table" para qualquer que seja o nome da sua tabela de polígonos. Também mude em generate_series para corresponder à extensão de seus polígonos e mude de 500 para o tamanho de grade desejado. a consulta pode ser reescrita para encontrar a extensão diretamente. mas não do meu telefone em um carro :)
Nicklas Aven

0

Você pode usar o algoritmo Lloyds:

https://en.m.wikipedia.org/wiki/Lloyd%27s_algorithm

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.