У меня есть задача узнать лучший путь от дома до станции метро.
На рисунке ниже представлены три типа данных:
- оранжевые точки - входы на станции метро
- фиолетовые точки - центральные точки домов
- синие линии - это дорожная сеть (пусть она сначала содержит все типы
дорожные данные)
Цель состоит в том, чтобы определить кратчайший путь от каждой точки дома до ближайшего входа в метро и построить слой полилинии.
Я думал об использовании библиотеки arcpy
для этого, но недавно слышал о модуле networkx
, но сейчас я знаю только, как загрузить данные в граф, однако я не могу понять, как искать желаемый кратчайший путь и что делать следующий вообще.
Вот мой черновик для загрузки данных в nx.Multigraph ():
import arcpy
import networkx as nx
import numpy as np
line_fc = 'lines'
points_hs = 'house_points'
graph = nx.MultiGraph()
with arcpy.da.SearchCursor(line_fc, 'SHAPE@') as sc:
for row in sc:
line_geom = row[0].getPart(0)
list_geom_cors = np.array([(n.X, n.Y) for n in line_geom])
graph.add_edges_from(list_geom_cors)
with arcpy.da.SearchCursor(points_hs, 'SHAPE@XY') as sc:
for row in sc:
graph.add_node(row[0])
Как правильно выполнить эту задачу?