Es gibt 3 wahrscheinliche Szenarien, für die ich nahe Entfernungen erfassen möchte:
- Eine U-Bahnstation mit zwei oder mehr benachbarten Stationen. Das heißt, die betreffende Station verbindet zwei oder mehr Hauptstrecken und hat zwei oder mehr benachbarte Stationen.
- Eine U-Bahnstation, die nur eine benachbarte Station hat. Dies ist die Station am Ende der Linie.
- Eine Inline-U-Bahnstation mit genau 2 benachbarten Stationen, eine von beiden.
Ich versuche, einen Wert zu berechnen, den man als "durchschnittliche Entfernung zwischen benachbarten Stationen" bezeichnen könnte.
Der arcpy.GenerateNearTable_analysis()
kann zwei Optionen verarbeiten: Abstand zum nächsten Merkmal und Abstand zwischen allen Merkmalen.
Hat jemand eine clevere Methode zur Lösung dieser Szenarien? Beachten Sie, dass jede Station in der Attributtabelle unter dem Feld "StationType" als "Interchange", "Terminal" oder "Inline" bezeichnet ist.
Hinzugefügt:
Hier ist ein Pseudo-Code, der auf dem Vorschlag von @ whuber in den Kommentaren basiert. Ich habe noch keine Zeit, dies herauszufinden. Wenn also jemand einen Stich machen möchte, werden Sie mit einem Häkchen belohnt! ;)
Ich habe mir die NetworkX- Bibliothek angesehen und sie scheint so zu funktionieren, wie ich es möchte.
Angesichts der Grafik:
A —― B ―― C ―― D
|
E
sowie die Knoten und Links:
Nodes = ["A", "B", "C", "D", "E"]
Links = [("A", "B"), ("B", "C"), ("C", "D"), ("B", "E")]
def myFunction(node):
identify the links that node belongs to
count the number of links
calculate the total link lengths
divide the total link lengths by the number of links
return someValue
Antworten:
Ich glaube, Ihr Problem, wie @whuber vorgeschlagen hat, sollte am besten in einer Adjacency Matrix dargestellt werden . Das heißt, wenn Sie die Zeit und die Neigung haben, die Theorie dahinter zu verstehen, anstatt sich auf ein Paket zu verlassen, um die Arbeit für Sie zu erledigen.
Für einen gegebenen Graphen G mit Eckpunkten von {v 1 , v 2 , ..., v n }, wobei n die Anzahl der Eckpunkte ist, müssen Sie eine Matrix der Größe M i, j mit i = n und j = erstellen n. Jeder Scheitelpunkt wird dann in der i- ten Zeile durch die Anzahl der Pfade dargestellt, die zu benachbarten Scheitelpunkten in der j- ten Spalte gefunden wurden.
Beispiel unten:
Angesichts dieser leicht komplexen Form der Darstellung Ihrer relativ einfachen Daten müssen Sie Ihre Scheitelpunkte willkürlich nummerieren und nicht für eine logische Reihenfolge repräsentativ sein.
HINWEIS: Angenommen, es gibt keine Stationsschleifen für sich selbst, hat eine k- te Zeile niemals einen anderen Wert als 0 in der k- ten Spalte. Alle folgenden Definitionen setzen dies als wahr voraus
HINWEIS: Angenommen, es gibt keine gleichzeitigen Leitungen zwischen derselben Station, gehen alle folgenden Beispiele davon aus, dass ein Zellenwert immer nur 1 oder 0 ist. Im obigen Beispiel wird auch davon ausgegangen, dass eine bidirektionale Fahrt zulässig ist.
Regeln zur Identifizierung von Stationskategorien:
1. Terminal
Ein Terminal würde durch eine k- te Zeile mit einer einzelnen Spalte identifiziert, die keinen Wert von 0 hat und deren Wert 1 ist. Siehe Eckpunkte 1, 2 und 3 in Beispiel 1 oben.
2. Kreuzung
Ein Übergang würde durch eine k- te Zeile mit mehr als zwei Spalten identifiziert, die einen Wert von 1 enthalten. Siehe Scheitelpunkt 4 in Beispiel 1 oben, alternativ alle Scheitelpunkte in Beispiel 3 oben.
3. Inline
Eine Inline-Station wird durch genau 2 Spalten in einer k- ten Zeile mit dem Wert 1 angezeigt. Siehe alle Verticies in Beispiel 2 oben. (Ignorieren Sie die Tatsache, dass {v 1 , v 3 } {v 2 , v 4 } schneidet .)
quelle
Sie könnten versuchen, Shapely zu verwenden . Wenn Sie Ihre Bogenpunkte in formschöne Punkte umwandeln, können Sie den Abstand zwischen einzelnen Punkten berechnen.
quelle