Python 两点图层的Networkx最短路径

Python 两点图层的Networkx最短路径,python,graph,geometry,distance,networkx,Python,Graph,Geometry,Distance,Networkx,我的任务是知道从房子到地铁站的最佳路线 下图中有三种类型的数据: 橙色圆点是地铁站的入口 紫罗兰色的圆点是房屋的中心点 蓝线是一个道路网络(首先让它包含所有类型的 (道路数据) 目标是确定从每个房屋点到最近地铁入口的最短路径,并构建多段线图层。 我曾考虑使用arcpy库,但最近听说了networkx模块,但现在我只知道如何在图形中加载数据,然而,我无法确定如何寻找理想的最短路径以及通常下一步要做什么 这是我将数据加载到nx.Multigraph()的草稿: 如何尽可能正确地执行此任务?我是

我的任务是知道从房子到地铁站的最佳路线

下图中有三种类型的数据:

  • 橙色圆点是地铁站的入口
  • 紫罗兰色的圆点是房屋的中心点
  • 蓝线是一个道路网络(首先让它包含所有类型的 (道路数据)
目标是确定从每个房屋点到最近地铁入口的最短路径,并构建多段线图层。 我曾考虑使用
arcpy
库,但最近听说了
networkx
模块,但现在我只知道如何在图形中加载数据,然而,我无法确定如何寻找理想的最短路径以及通常下一步要做什么

这是我将数据加载到nx.Multigraph()的草稿:


如何尽可能正确地执行此任务?

我是否理解正确:您已经加载了图形。对于每栋房子,你想知道最近的地铁站的路吗?如果是,这有帮助吗@乔尔:是的,没错。但我不确定我上传数据到图形中的代码是否正确。如果向图形添加一条边,而任何节点都不存在,则它们将自动添加到图形节点。如果要在此网络上运行
最短路径
,然后您应该知道networkx搜索的是以整数条边(默认情况下)测量的最短路径,而不是节点之间的几何距离。要获得在真实世界中以总横截距离测量的最短路径,您必须为边添加权重,以指示每条边的长度(假设边在您的问题中具有不同的长度)。
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])