Encontrando grupos de N pontos a uma distância X usando o ArcGIS Desktop?


12

Tentamos dois métodos de análise de cluster:

... mas nenhum deles atende à nossa especificação, que possui estes três parâmetros:

  • um conjunto de recursos de ponto
  • N pontos em um cluster
  • Faixa de distância X para procurar

Por exemplo, "encontre-me os pontos em que cada cluster tem 10 pontos a 50 metros" ou algo nesse sentido.

O ArcGIS 10 possui as duas ferramentas que eu vinculei acima, mas nenhuma parece abordar os N pontos em uma parte do cluster.

Nossos requisitos podem ser atendidos com outras ferramentas no ArcGIS? O que estou chamando de análise de cluster é conhecido como um tipo de cluster específico?

Tínhamos uma versão disso em outro aplicativo, mas eu realmente queria usar as ferramentas do ArcGIS.


"prometido ao cliente sem o meu conhecimento" ... sinto sua dor. Uma solução de arcobjects seria aceitável?
precisa saber é o seguinte

Não seria possível criar os clusters e processar aqueles que não atendem aos seus critérios? Ou seja (e pergunto devido à falta de experiência nessa análise), os clusters mudariam se recebessem esse terceiro critério antes da análise?
Nathanus

@Kirk Kuykendall. O ArcObjects pode não ser possível, pois precisa ser exposto como um serviço de geoprocessamento via servidor arcgis 10.
Hath

O cluster precisa ser baseado em um círculo ou pode ser retangular. É fácil criar um hash a partir de coordenadas, para que o código de hash para todos os pontos que estão na mesma caixa de 50x50 seja o mesmo.
21411 Kirk Kuykendall

@ Kirk - tem que ser um círculo, eu acho.
Hath

Respostas:


10

Tente usar a ferramenta Buffer para armazenar os pontos em tolerância, dissolva-os para criar polígonos únicos para cada cluster e use uma junção para contar o número de pontos no cluster.

Em seguida, use a proporção entre a área do cluster e o número de pontos para aplicar seus parâmetros.


+1 Essa abordagem deve funcionar, mas não vejo onde a área entra na solução.
whuber

area / count fornece uma medida da densidade dentro de um cluster. Isso ajudaria a eliminar cadeias lineares de pontos que não devem ser considerados como aglomerados.
Matthew Snape

2
OK, mas a declaração do problema não exige isso. Ele pede apenas "10 pontos dentro de 50 metros", por exemplo. Se você amortecer os pontos em 50/2 = 25 metros, qualquer local com 10 ou mais sobreposições se qualifica como o centro desse cluster. Feito!
whuber

Quando você quer dizer 'junção', quer dizer spefically uma junção espacial.
Hath

2

Isso pode ser feito usando o ArcObjects sem muita dificuldade.

Crie uma maptopologia e adicione a classe de característica do ponto a ela. Defina a tolerância do cluster com base na distância do cluster (50) e construa o cache .

Faça um loop através de cada no maptopology.cache.nodes . Se ITopologyNode.Parents.Count> 10, faça o que for necessário.

Fiz algo semelhante para uma camada personalizada que desenha cada ponto de cluster com um símbolo cuja cor é baseada no número de recursos de pontos no cluster. O desempenho era aceitável, pois os recursos são armazenados em cache na memória - a reconstrução do cache é a parte cara.

Semelhante ao código postado aqui .


Seria possível em python?
Hath

Eu estou pensando que não. Não estou familiarizado com o arcobjects sdk e também não tem certeza dos requisitos de licença para usá-lo.
Hath

2

Tente ir para o primeiro ponto e, em seguida, crie uma função recursiva, que verifique pontos à distância e realize a mesma operação, que procura pontos à distância e execute a mesma operação, etc.

Acabei de resolver um problema semelhante, pois precisava encontrar um conjunto de pontos em conformidade com uma determinada cláusula; Criei uma função recursiva para descobrir se havia pontos conectados em 8 células (N, NW, W, SW, S, SE, E, NE) e chamei a mesma função para esse ponto. Se a lista retornada continha x pontos, agrego um polígono em torno dela.


1

Eu não tenho nenhuma informação de uso no ArcGIS, pois eu uso apenas o Software OpenSource. Mas acho que isso pode ser feito, com os Openlayers. Há um exemplo de estratégia de cluster, que você pode encontrar aqui: http://openlayers.org/dev/examples/strategy-cluster.html


-1 O OP está pedindo uma maneira arcgis de fazer isso. Dar uma maneira OpenLayers realmente não vai ajudar.
Nathan W

2
Mas a abordagem de openlayers não poderia ajudá-lo a descobrir como é feito para implementá-lo no arcgis?
precisa saber é o seguinte

1
Concordo com o comentário e gosto da sua abordagem: muitas vezes precisamos procurar idéias e inspiração fora da nossa zona de conforto. Mas consideraria sua resposta mais útil se você pudesse explicar como esse exemplo está conectado à pergunta específica feita aqui. Embora a pergunta e o exemplo compartilhem a palavra "cluster", não é evidente que eles a usem no mesmo sentido ou resolvam problemas suficientemente semelhantes.
whuber

Votei positivamente isso porque estava procurando uma maneira de código aberto de fazer isso e, apesar do arcgis desejado, muitas vezes descobri que uma solução em outros sistemas GIS pode ajudá-lo a encontrar uma solução no seu software de escolha usando suas ferramentas de uma maneira isso não é comum.
GeorgeC 14/01
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.