Cluster in Vektorpunktdaten mit QGIS identifizieren?

34

Ich habe einen Vektordatensatz ländlicher Breitbanddatenpunkte (wie schnell usw.) und möchte untersuchen, ob es Punktcluster mit ähnlichen Merkmalen gibt, und Polygone zeichnen, die diese umfassen.

Ich kann zum Beispiel 45.000 Punkte in einem einzelnen PostGIS-Datensatz haben, der über eine Landschaft verteilt ist. Ich möchte Cluster identifizieren, die innerhalb von x km voneinander liegen und deren Geschwindigkeit unter y kbps liegt, und für jeden qualifizierenden Cluster konvexe Hüllen erzeugen.

Gibt es eine einfache Möglichkeit, dies zum Beispiel in QGIS zu tun?

Adrian
quelle
3
Möglicherweise möchten Sie die Eigenschaften von Breitband berücksichtigen. In städtischen Gebieten treten hohe Geschwindigkeiten auf. industrielle Ballungsräume; Ausstrahlung von COs, Modems und anderen Glasfaser- / Kabel- / DSL-Infrastrukturen entlang von Straßen; und Broadcast von bestimmten Mobilfunkmasten (abhängig von Ihrer Definition von "Breitband"). Somit scheinen sich die hohen Geschwindigkeiten zu häufen und die niedrigeren Geschwindigkeiten sehen aus wie Lücken in den Clustern. Insbesondere ist es unwahrscheinlich, dass konvexe Rümpfe sogar eine anständige Beschreibung von Regionen mit niedriger Geschwindigkeit darstellen. Es wäre gut zu wissen, wie Sie die gefundenen "Cluster" interpretieren möchten.
whuber
Danke für die Hilfe. Ich untersuche die ländlicheren Gebiete, in denen die Architektur des kabelgebundenen Breitbandnetzes aufgrund der Verteilung von Straßenschränken und direkt eingespeisten Leitungen an Masten sowie zum Beispiel der Geografie der Gebiete ungewöhnlichere Situationen hervorrufen kann. Als Ergebnis finden Sie Cluster, die ein nützlicher Ausgangspunkt für die Entwicklung lokaler Lösungen und ein wichtiger Schritt bei der Entwicklung einer Strategie sein können. Tatsächlich kann man sie sogar in städtischen Gebieten finden, oft aufgrund des industriellen Erbes oder von Dingen wie Eisenbahnlinien und Flüssen, die sich als schwierig zu überqueren erweisen.
Adrian

Antworten:

15

Ich habe Teile aus mehreren Vorschlägen kombiniert und einige meiner eigenen hinzugefügt und eine Lösung gefunden, die für mich gut funktioniert - und das alles aus QGis heraus!

Ich habe zuerst ein PostGis SELECT ausgeführt, um die Punkte zu finden, die die richtigen gemeinsamen Attribute haben und innerhalb von x km voneinander liegen:

SELECT DISTINCT s1.postcode, s1.the_geom, s1.gid FROM broadband_data AS s1 JOIN broadband_data AS s2 ON ST_DWithin (s1.the_geom, s2.the_geom, 1000) WHERE s1.postcode! = S2.postcode AND s1.fastest_broadband <= 2000

(Ziemlich direkt aus Mannings sehr gutem PostGis in Action- Buch, nur mit einem Self-Join)

Ich habe dann das Carson Farmer's ManageR Plugin geladen und die Ebene importiert. Von hier aus folgte ich dem Clustering - Prozess vorgeschlagen PAM hier , und das Ergebnis in eine Formdatei exportiert, auf dem Convex Hulls in Sekunden berechnet wurden fTools (Carson tut umgehen!).

Adrian
quelle
Die 1. Ausgabe von PostGIS in Action ist vergriffen. Hier ist ein Link zur 2. Ausgabe von manning.com/books/postgis-in-action-second-edition und ein Link zum ersten Kapitel, das kostenlos unter manning-content.s3.amazonaws.com/download/a/… verfügbar ist ideal, um sich ein Bild von PostGIS zu machen
Martin Hügi
8

Obwohl dies keine QGIS-Lösung ist, würde ich mich persönlich für eine explorative Analyse mit SaTScan entscheiden . Es ist schnell, gut dokumentiert und weit verbreitet, sodass Sie beim Starten keine Probleme haben sollten. Für 45.000 Punkte ist möglicherweise etwas RAM erforderlich.

Ich bin nicht sicher, ob es direkt von Postgres lesen kann, aber einfach aus DBF- und Textdateien importiert werden kann.

Die Ausgabe der Analyse kann dann problemlos in Postgres oder QGIS zurückgelesen werden. Sie können nach kreisförmigen Clustern oder Ellipsen suchen (möglicherweise hilfreich, wenn Ihre Daten eine bestimmte Art von Siedlungen enthalten, z. B. langgestreckte Städte / Dörfer in Tälern usw.). Sie können dann Polygone oder Ellipsen generieren oder nur die Positionen anzeigen, die Mitglieder von Clustern sind.

Für eine schnelle Vorschau der Ergebnisse in Google Earth können Sie auch das SaTScan to Google Earth-Konvertierungstool von NAACCR verwenden .

Wichtig: Wenn Sie Monte-Carlo-Simulationen ausführen (mindestens 99), können Sie auch etwas über die statistische Signifikanz Ihrer Cluster aussagen. Die Interpretation und Begründung dieser Cluster wird ein weiteres Thema sein, wie es zumindest in den letzten zwei Jahrzehnten in den Raumwissenschaften diskutiert wurde (glaube ich;).

Sie könnten versuchen, eine rein räumliche Analyse durchzuführen, um nach Clustern mit hohen, niedrigen oder hohen und niedrigen Werten zu suchen. Wenn Sie einige zeitliche Attribute in Ihren Daten haben (tägliche, wöchentliche Aggregationen), dann halte ich es für wirklich interessant, einige Raum-Zeit-Modelle auszuführen.

radek
quelle
2
Sieht gut aus - Gute Antwort
Mapperz
5

SciPy hat ein Clustering-Paket (für Python), Sie können es in der Python-Konsole verwenden, ein einfaches Plugin dafür schreiben oder PL / Python in postgis verwenden.

http://docs.scipy.org/doc/scipy/reference/cluster.html

Nach der Analyse verwenden Sie einfach f-tools, um die konvexen Rümpfe zu erstellen.

Pablo
quelle
Ich bin ein einfacher Benutzer mit sehr wenig Erfahrung mit Python, aber ich werde einen Blick darauf werfen - ich weiß, ich muss lernen!
Adrian
Berücksichtigt SciPy-Clustering räumliche Beziehungen zwischen Punkten?
Radek
1
Sie addieren einfach zwei weitere Kovariaten für die x- und y-Koordinate Ihres Punktes.
Jose
5

Es gibt ein ähnliches Beispiel von dem, was Sie wollen , mit R und GRASS zu tun hier . Alternativ können Sie die vorgeschlagenen Clustering-Tools von scipy verwenden und dann die Berechnungen der konvexen Hülle mit dieser Methode durchführen .

Jose
quelle
3

Sie können das Ftools-Plugin ausprobieren. Vector> Geoprocessing Tools> Convex Hulls.

Es gibt eine Option Create convex hulls based on input field, bei der der Eingabefeldparameter aus den Attributen Ihrer Eingabepunkte stammen soll.

maning
quelle
Danke für die Hilfe. Das konvexe Hüllenbit erstellt die Polygone, identifiziert jedoch nicht, ob Cluster vorhanden sind oder wo sie sich befinden. Ich würde wirklich gerne zuerst einen Weg finden, Punkte mit ähnlichen Merkmalen innerhalb von x km voneinander zu verknüpfen. Ich vermute, ich müsste ein Skript ausführen, das die Existenz von Clustern eindeutig identifiziert und ein zusätzliches Feld in der Postgis-Tabelle für die Mitglieder jedes Clusters aktualisiert. Erstellen Sie beispielsweise eine Delaunay-Triangulation und filtern Sie alle Punkte heraus, an denen die Seiten der Dreiecke länger als x km sind, aber ich habe keine Ahnung, wie Sie das tun sollen
Adrian