Istnieją 3 prawdopodobne scenariusze, które próbuję uchwycić w bliskiej odległości dla:
- Stacja metra wymiany, która ma 2 lub więcej stacji sąsiednich. Oznacza to, że dana stacja łączy 2 lub więcej głównych tras i ma 2 lub więcej stacji sąsiednich.
- Terminalowa stacja metra, która ma tylko 1 stację sąsiednią. To jest stacja na końcu linii.
- Inline stacja metra, która ma dokładnie 2 sąsiednie stacje, jedno z obu podejść.
Próbuję obliczyć wartość, którą można nazwać „średnią odległością między sąsiednimi stacjami”
arcpy.GenerateNearTable_analysis()
Może obsługiwać dwie opcje: odległość do najbliższego obiektu i odległość między wszystkimi funkcjami.
Czy ktoś ma sprytną metodę rozwiązania tych scenariuszy? Zauważ, że każda stacja jest oznaczona jako „Interchange”, „Terminal” lub „Inline” w tabeli atrybutów pod polem „StationType”.
Dodany:
Oto kod psuedo oparty na sugestii @ whuber w komentarzach. Nie mam jeszcze czasu, aby to rozgryźć, więc jeśli ktoś zechce go dźgnąć, zostaniesz nagrodzony znacznikiem wyboru! ;)
Brałem spojrzeć na NetworkX biblioteki i wydaje się działać tak jak chcemy.
Biorąc pod uwagę wykres:
A —― B ―― C ―― D
|
E
a także węzły i linki:
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
Odpowiedzi:
Wierzę, że twój problem, jak sugerował @whuber, najlepiej byłby reprezentowany w Matrycy Adiakencji . To znaczy, jeśli masz czas i ochotę zrozumieć teorię, zamiast polegać na pakiecie, który wykona pracę za Ciebie.
Dla danego wykresu G z wierzchołkami {v 1 , v 2 , ..., v n }, gdzie n jest liczbą wierzchołków, musisz utworzyć macierz o rozmiarze Mi , j, gdzie i = n i j = n. Każdy wierzchołek jest następnie reprezentowany w i- tym rzędzie przez liczbę ścieżek znalezionych do sąsiednich wierzchołków w j- tej kolumnie.
Przykład poniżej:
Biorąc pod uwagę tę dość złożoną formę reprezentowania twoich stosunkowo prostych danych, będziesz musiał numerować swoje wierzchołki w dowolny sposób, nie reprezentujący żadnego logicznego porządku.
UWAGA: Zakładając, że nie zapętla się stacja, k- ty rząd nigdy nie będzie miał wartości innej niż 0 w k- tej kolumnie. Wszystkie poniższe definicje zakładają, że to prawda
UWAGA: Zakładając, że nie ma równoczesnych linii między tą samą stacją, we wszystkich poniższych przykładach założono, że wartość komórki zawsze będzie wynosić 1 lub 0. W powyższym przykładzie założono również, że dwukierunkowy przesuw jest dozwolony.
Zasady identyfikowania kategorii stacji:
1. Terminal
Terminal byłby identyfikowany przez k- ty rząd mający pojedynczą kolumnę, która nie ma wartości 0, a która to wartość wynosi 1. Patrz wierzchołki 1, 2 i 3 w przykładzie 1 powyżej.
2. Połączenie
Połączenie byłoby identyfikowane przez k- ty rząd mający więcej niż dwie kolumny zawierające wartość 1. Patrz wierzchołek 4 w przykładzie 1 powyżej, lub wszystkie wierzchołki w przykładzie 3 powyżej.
3. Inline
Stacja inline jest oznaczona przez posiadanie dokładnie 2 kolumn w k- tym rzędzie, gdzie wartość wynosi 1. Zobacz wszystkie wierzchołki w przykładzie 2 powyżej. (Zignoruj fakt, że {v 1 , v 3 } przecina {v 2 , v 4 }).
źródło
Możesz spróbować użyć Shapely . Po przekonwertowaniu punktów arkowatych na punkty kształtne można obliczyć odległość między poszczególnymi punktami.
źródło