Suchen von N-Punkt-Clustern in x-Entfernung mit ArcGIS Desktop?


12

Wir haben zwei Methoden der Clusteranalyse ausprobiert:

... aber keiner entspricht unserer Spezifikation, die diese 3 Parameter hat:

  • Eine Reihe von Punktfunktionen
  • N Punkte innerhalb eines Clusters
  • X-Entfernungsband zum Einsehen

Zum Beispiel "finde ich die Punkte, an denen jeder Cluster 10 Punkte innerhalb von 50 Metern hat" oder so ähnlich.

ArcGIS 10 verfügt über die beiden oben verlinkten Tools, scheint jedoch keine der N Punkte innerhalb eines Cluster-Teils zu behandeln.

Können unsere Anforderungen mit anderen Tools in ArcGIS erfüllt werden? Ist das, was ich als Clusteranalyse bezeichne, als bestimmter Clustertyp bekannt?

Wir hatten eine Version davon in einer anderen Anwendung, aber ich wollte die Tools unbedingt in ArcGIS verwenden.


"Ohne mein Wissen dem Klienten versprochen" ... Ich fühle deinen Schmerz. Wäre eine arcobjects-Lösung akzeptabel?
Kirk Kuykendall

Wäre es nicht möglich, die Cluster zu erstellen und dann diejenigen zu verarbeiten, die nicht Ihren Kriterien entsprechen? Das heißt (und ich frage aufgrund mangelnder Erfahrung mit dieser Analyse), würden sich die Cluster ändern, wenn sie vor der Analyse dieses dritte Kriterium erhalten würden?
Nathanus

@ Kirk Kuykendall. ArcObjects ist möglicherweise nicht möglich, da es als Geoverarbeitungs-Service über den arcgis 10-Server verfügbar gemacht werden muss.
Hath

Muss der Cluster auf einem Kreis basieren oder kann er rechteckig sein? Das Erstellen eines Hashs aus Koordinaten, sodass der Hashcode für alle Punkte, die sich in derselben 50 x 50-Box befinden, identisch ist, ist einfach.
Kirk Kuykendall

@ Kirk - muss ein Kreis sein, denke ich.
Hath

Antworten:


10

Verwenden Sie das Puffer-Werkzeug, um die Punkte auf eine Toleranz zu puffern, lösen Sie es auf, um einzelne Polygone für jeden Cluster zu erstellen, und verwenden Sie dann eine Verknüpfung, um die Anzahl der Punkte im Cluster zu zählen.

Verwenden Sie dann das Verhältnis zwischen der Fläche des Clusters und der Anzahl der Punkte, um Ihre Parameter anzuwenden.


+1 Dieser Ansatz sollte funktionieren, aber ich sehe nicht, wo der Bereich in die Lösung kommt.
whuber

area / count gibt ein Maß für die Dichte innerhalb eines Clusters. Dies würde dazu beitragen, lineare Punktketten zu beseitigen, die nicht als Cluster betrachtet werden sollten.
Matthew Snape

2
OK, aber für die Problembeschreibung ist das nicht erforderlich. Es werden nur "10 Punkte innerhalb von 50 Metern" abgefragt, z. Wenn Sie Punkte um 50/2 = 25 Meter puffern, gilt jede Stelle mit 10 oder mehr Überlappungen als Zentrum eines solchen Clusters. Erledigt!
whuber

Wenn Sie "beitreten" meinen, meinen Sie spe- ziell einen räumlichen Beitritt.
Hath

2

Dies kann mit ArcObjects ohne große Schwierigkeiten erreicht werden.

Erstellen Sie eine MapTopology und fügen Sie ihr die Punkt-Feature- Class hinzu. Stellen Sie die Clustertoleranz basierend auf Ihrer Clusterentfernung ein (50) und erstellen Sie den Cache .

Durchlaufen Sie jeden Knoten in maptopology.cache.nodes . Wenn ITopologyNode.Parents.Count> 10, tun Sie alles, was Sie tun müssen.

Ich habe etwas Ähnliches für eine benutzerdefinierte Ebene getan, die jeden Clusterpunkt mit einem Symbol zeichnet, dessen Farbe auf der Anzahl der Punkt-Features im Cluster basiert. Die Leistung war akzeptabel, da die Funktionen im Arbeitsspeicher zwischengespeichert werden - die Neuerstellung des Cache ist der teure Teil.

Ähnlich wie hier geposteter Code .


Wäre es in Python möglich?
Hath

Ich denke nicht. Nicht so vertraut mit arcobjects sdk und nicht ganz sicher, welche Lizenzanforderungen für die Verwendung erforderlich sind.
Hath

2

Gehen Sie zum ersten Punkt und erstellen Sie dann eine rekursive Funktion, die nach Punkten in der Entfernung sucht und die gleiche Operation ausführt, die nach Punkten in der Entfernung sucht und die gleiche Operation für diese usw. ausführt.

Ich habe gerade ein ähnliches Problem gelöst, indem ich eine Reihe von Punkten finden musste, die einer bestimmten Klausel entsprachen. Ich habe eine rekursive Funktion erstellt, um zu ermitteln, ob Punkte innerhalb von 8 Zellen (N, NW, W, SW, S, SE, E, NE) verbunden sind, und habe für diesen Punkt dieselbe Funktion aufgerufen. Wenn die zurückgegebene Liste x Punkte enthielt, aggregiere ich ein Polygon darum.


1

Ich habe keine Nutzungsinformationen zu ArcGIS, da ich nur OpenSource-Software verwende. Aber ich denke, dass dies mit Openlayers erreicht werden kann. Ein Beispiel für eine Clusterstrategie finden Sie hier: http://openlayers.org/dev/examples/strategy-cluster.html


-1 OP fragt nach einem Arcgis-Weg, um dies zu tun. Einen OpenLayers-Weg einzuschlagen, wird nicht wirklich helfen.
Nathan W

2
Aber der OpenLayer-Ansatz konnte ihm nicht helfen, herauszufinden, wie es gemacht wird, um es in arcgis zu implementieren?
1amtoo1337,

1
Ich stimme dem Kommentar zu und mag Ihren Ansatz: Oft müssen wir außerhalb unserer Komfortzone nach Ideen und Inspirationen suchen. Aber ich würde Ihre Antwort nützlicher finden, wenn Sie erklären könnten, wie dieses Beispiel mit der hier gestellten Frage zusammenhängt. Obwohl die Frage und das Beispiel das Wort "Cluster" gemeinsam haben, ist es nicht offensichtlich, dass sie es im gleichen Sinne verwenden oder ausreichend ähnliche Probleme ansprechen.
whuber

Ich habe dies positiv bewertet, da ich nach einer Open Source-Methode gesucht habe, um dies zu tun, und obwohl der Beitrag arcgis wollte, habe ich oft festgestellt, dass eine Lösung in anderen GIS-Systemen Ihnen helfen kann, eine Lösung in Ihrer Software zu finden, indem Sie die Tools auf eine Art und Weise verwenden das ist nicht üblich.
GeorgeC
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.