Ich habe eine Reihe von Linien, die Buslinien darstellen. Einige der Linien überlappen sich und nehmen die gleichen Straßen.
Ich kann die Knoten extrahieren.
Ich bin jedoch daran interessiert, nur Kreuzungen wie diese zu extrahieren:
Wie kann ich das machen? Ich suche nach Wegen mit QGIS oder Python.
Ich habe die Schnittmethode von GDAL Python ausprobiert, aber dies gibt mir im Grunde nur die Eckpunkte zurück.
Die Line Intersections-Methode von QGIS gibt mir die Kreuzungen zurück, wenn sich zwei Linien kreuzen. Für den Fall, dass zwei Buslinien einen weiten Teil ihrer Route auf derselben Straße fahren, gibt es mir nicht den Punkt, an dem sie zusammenführen.
Antworten:
Die Knoten:
Sie möchten zwei Dinge, die Endpunkte der Polylinien (ohne Zwischenknoten) und die Schnittpunkte. Es gibt ein zusätzliches Problem, einige Polylinienendpunkte sind auch Schnittpunkte:
Eine Lösung besteht darin, Python und die Module Shapely und Fiona zu verwenden
1) Lesen Sie das Shapefile:
2) Finden Sie die Endpunkte der Linien ( wie würde man die Endpunkte einer Polylinie erhalten? ):
3) Berechnen Sie die Schnittpunkte (Iteration durch Geometriepaare in der Ebene mit dem itertools- Modul). Das Ergebnis einiger Kreuzungen sind MultiPoints und wir möchten eine Liste von Punkten:
4) Beseitigen Sie Duplikate zwischen Endpunkten und Schnittpunkten (wie Sie in den Abbildungen sehen können).
5) Speichern Sie das resultierende Shapefile
Endergebnis:
Die Liniensegmente
Wenn Sie auch die Segmente zwischen den Knoten möchten, müssen Sie Ihr Shapefile "planarisieren" ( planares Diagramm , keine Kanten kreuzen sich). Dies kann durch die unary_union- Funktion von Shapely erfolgen
quelle
result = endpts.extend([pt for pt in inters if pt not in endpts])
Da sich die.extend
Methode anscheinend ändertendpt
. In meinem Fallresult = None
nach dieser Operation. Es ist das,endpts
was am Ende die Ergebniseinstellung enthält