Есть 3 вероятных сценария, для которых я пытаюсь запечатлеть близкие расстояния:
- Станция метро обмена, которая имеет 2 или более соседних станций. То есть рассматриваемая станция соединяет 2 или более основных маршрутов и имеет 2 или более соседних станций.
- Терминальная станция метро, которая имеет только 1 соседнюю станцию. Это станция в конце линии.
- Линейная станция метро, которая имеет ровно 2 соседние станции, одна из которых подходит.
Я пытаюсь вычислить значение, которое можно назвать «средним расстоянием между соседними станциями».
arcpy.GenerateNearTable_analysis()
Может обрабатывать два варианта: Расстояние до ближайшего элемента, и расстояние между всеми функциями.
У кого-нибудь есть умный метод решения этих сценариев? Обратите внимание, что каждая станция обозначена как «Interchange», «Terminal» или «Inline» в таблице атрибутов под полем «StationType».
Добавлено:
Вот некоторый код psuedo, основанный на предложении @ whuber в комментариях. У меня пока нет времени, чтобы это выяснить, поэтому, если кто-то захочет нанести удар, вы будете вознаграждены галочкой! ;)
Я взглянул на библиотеку NetworkX, и она, кажется, работает так, как я хочу.
Учитывая график:
A —― B ―― C ―― D
|
E
а также узлы и ссылки:
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
Ответы:
Я полагаю, что ваша проблема, как предложил @whuber, лучше всего будет представлена в Матрице смежности . То есть, если у вас есть время и желание понять теорию, лежащую в основе, а не полагаться на пакет, чтобы сделать работу за вас.
Для данного графа G с вершинами {v 1 , v 2 , ..., v n }, где n - количество вершин, необходимо создать матрицу размера M i, j, где i = n и j = п. Каждая вершина затем представляется в i- й строке числом путей, найденных в соседних вершинах в j- м столбце.
Пример ниже:
Учитывая эту слегка сложную форму представления ваших относительно простых данных, вам нужно будет нумеровать свои вершины произвольным образом, не представляя какой-либо логический порядок.
ПРИМЕЧАНИЕ. Предполагая, что ни одна станция не зацикливается на себе, k- я строка никогда не будет иметь значения, отличного от 0 в k- м столбце. Все определения ниже предполагают, что это правда
ПРИМЕЧАНИЕ. Предполагая, что между одной и той же станцией нет параллельных линий, все приведенные ниже примеры предполагают, что значение ячейки будет только 1 или 0. В приведенном выше примере также допускается двунаправленное перемещение.
Правила определения категорий станций:
1. Терминал
Терминал будет идентифицирован k- й строкой, имеющей один столбец, который не имеет значения 0, и который имеет значение 1. См. Вершины 1, 2 и 3 в примере 1 выше.
2. Соединение
Соединение будет идентифицировано k- й строкой, имеющей более двух столбцов, содержащих значение 1. См. Вершину 4 в примере 1 выше, или все вершины в примере 3 выше.
3. Встроенный
Встроенная станция обозначается наличием ровно 2 столбцов в k- й строке, где значение равно 1. См. Все вершины в примере 2 выше. (Игнорируйте тот факт, что {v 1 , v 3 } пересекается с {v 2 , v 4 }.)
источник
Вы можете попробовать использовать Shapely . Если вы преобразуете свои дугообразные точки в фигурные, вы можете рассчитать расстояние между отдельными точками.
источник