Trouver des clusters de N points à une distance X à l'aide d'ArcGIS Desktop?

12

Nous avons essayé deux méthodes d'analyse de cluster:

... mais ni l'un ni l'autre ne répond à nos spécifications qui ont ces 3 paramètres:

  • un ensemble de fonctions ponctuelles
  • N points dans un cluster
  • Bande de distance X à regarder

Par exemple, "trouvez-moi les points où chaque groupe a 10 points à moins de 50 mètres" ou quelque chose à cet effet.

ArcGIS 10 possède les deux outils que j'ai liés ci-dessus, mais aucun ne semble traiter les N points dans une partie de cluster.

Nos exigences peuvent-elles être satisfaites avec d'autres outils dans ArcGIS? Ce que j'appelle l'analyse de cluster est-il connu comme un type de cluster particulier?

Nous en avions une version dans une autre application, mais je voulais vraiment utiliser les outils d'ArcGIS.

Hath
la source
"promis au client à mon insu" ... Je ressens ta douleur. Une solution arcobjects serait-elle acceptable?
Kirk Kuykendall
Ne serait-il pas possible de créer les clusters puis de traiter ceux qui ne répondent pas à vos critères? C'est-à-dire (et je demande par manque d'expérience dans cette analyse), les clusters changeraient -ils s'ils recevaient ce troisième critère avant l'analyse?
Nathanus
@Kirk Kuykendall. ArcObjects peut ne pas être possible car il doit être exposé en tant que service de géotraitement via le serveur arcgis 10.
Hath
Le cluster doit-il être basé sur un cercle ou peut-il être rectangulaire? Créer un hachage à partir de coordonnées telles que le code de hachage pour tous les points qui se trouvent dans la même case 50x50 sont les mêmes est facile.
Kirk Kuykendall
@ Kirk - doit être un cercle, je pense.
Hath

Réponses:

10

Essayez d'utiliser l'outil Tampon pour tamponner les points selon une tolérance, dissolvez pour créer des polygones uniques pour chaque cluster, puis utilisez une jointure pour compter le nombre de points dans le cluster.

Utilisez ensuite le rapport entre l'aire du cluster et le nombre de points pour appliquer vos paramètres.

Matthew Snape
la source
+1 Cette approche devrait fonctionner, mais je ne vois pas où la zone entre dans la solution.
whuber
surface / comptage donne une mesure de la densité au sein d'un cluster. Cela aiderait à éliminer les chaînes linéaires de points qui ne devraient pas être considérées comme des grappes.
Matthew Snape
2
OK, mais l'énoncé du problème ne l'exige pas. Il demande seulement «10 points à moins de 50 mètres», par exemple. Si vous tamponnez les points de 50/2 = 25 mètres, tout endroit où il y a 10 chevauchements ou plus est considéré comme le centre d'un tel cluster. Terminé!
whuber
Lorsque vous voulez dire «joindre», voulez-vous dire spécifiquement une jointure spatiale.
Hath
2

Cela peut être accompli en utilisant ArcObjects sans trop de difficulté.

Créez une maptopologie et ajoutez-y la classe de points. Définissez la tolérance de cluster en fonction de la distance de votre cluster (50) et créez le cache .

Parcourez chaque nœud dans le maptopology.cache.nodes . Si ITopologyNode.Parents.Count> 10, faites ce que vous devez faire.

J'ai fait quelque chose de similaire pour un calque personnalisé qui dessine chaque point de cluster avec un symbole dont la couleur est basée sur le nombre d'entités ponctuelles dans le cluster. Les performances étaient acceptables car les fonctionnalités sont mises en cache en mémoire - la reconstruction du cache est la partie coûteuse.

Similaire au code affiché ici .

Kirk Kuykendall
la source
Serait-ce possible en python?
Hath
Je ne pense pas. Pas très familier avec arcobjects sdk et pas tout à fait sûr des exigences de licence pour l'utiliser non plus.
Hath
2

Essayez d'aller au premier point, puis créez une fonction récursive, qui vérifie les points dans la distance, et effectue la même opération sur celui-ci, qui recherche les points dans la distance, et effectue la même opération sur cela, etc.

Je viens de résoudre un problème similaire, en ce sens que je devais trouver un ensemble de points conformes à une certaine clause; J'ai construit une fonction récursive pour trouver s'il y avait des points connectés dans 8 cellules (N, NW, W, SW, S, SE, E, NE) et j'ai appelé la même fonction pour ce point. Si la liste renvoyée contenait x points, j'agrège un polygone autour d'elle.

Poilu
la source
1

Je n'ai aucune information d'utilisation sur ArcGIS car j'utilise uniquement le logiciel OpenSource. Mais je pense que cela peut être accompli avec Openlayers. Il existe un exemple de stratégie de cluster, que vous pouvez trouver ici: http://openlayers.org/dev/examples/strategy-cluster.html

1amtoo1337
la source
-1 OP demande une manière arcis de le faire. Donner un moyen OpenLayers ne va pas vraiment aider.
Nathan W
2
Mais l'approche openlayers ne pouvait pas l'aider à découvrir comment procéder pour l'implémenter dans arcgis ??
1amtoo1337
1
Je suis d'accord avec le commentaire et j'aime votre approche: nous devons souvent chercher en dehors de notre zone de confort des idées et de l'inspiration. Mais je trouverais votre réponse plus utile si vous pouviez expliquer comment cet exemple est lié à la question particulière posée ici. Bien que la question et l'exemple partagent le mot «cluster», il n'est pas évident qu'ils l'utilisent dans le même sens ou abordent des problèmes suffisamment similaires.
whuber
J'ai voté pour cela car je cherchais un moyen open source de le faire et même si le post voulait des arcgis, j'ai souvent constaté qu'une solution dans d'autres systèmes SIG peut vous aider à trouver une solution dans le logiciel de votre choix en utilisant ses outils d'une manière ce n'est pas courant.
GeorgeC