我目前正在尝试查找街道网络中不同节点对的最短路径。
我使用Overpass Turbo提取了代表街道网络的XML文件,并使用OSMNX graph_from_file函数从该文件制作了图形。我使用OSMNX graph_to_gdfs函数提取了节点和边缘信息,其中获得了2个地理数据框。因此,我在边缘地理数据框的“高速公路”列下编辑了信息,以满足我的需要。我没有做任何其他更改。然后,我使用OSMNX gdfs_to_graph函数使用节点和边缘地理数据框制作了一个新图,该图应该类似于从XML文件提取的图,除非边缘数据有一些变化。
现在,当我尝试查找图中一个节点到另一个节点的最短路径时,它显示了连接错误。我试图使用直接从XML文件导入的图形来找到同一节点对之间的最短路径,并且这种方法非常有效。在另一种情况下,我没有对地理数据框进行任何修改,而是经历了无法正常进行的整个过程。这意味着从地理数据库中导入图形时,存在一些与连接有关的问题,我无法理解。有人可以解决这个问题吗?
G_multiDi = ox.graph_from_file('overpass_ped_PTstop_export.xml', bidirectional=False, simplify=True, retain_all=True, name='unnamed')
G_undi = G_multiDi.to_undirected()
fig, ax = ox.plot_graph(G_undi)
nodes = ox.graph_to_gdfs(G_undi, nodes=True, edges=False)
edges = ox.graph_to_gdfs(G_undi, nodes=False, edges=True)
In [43]: nx.shortest_path(G_undi,35524093,35365678,weight = 'length')
Out[43]: [35524093, 53132201, 35524331, 1994687832, 35365678]
#GEODATAFRAME TO GRAPH
gdf_nodes = nodes
gdf_edges = edges
graph2 = ox.gdfs_to_graph(gdf_nodes, gdf_edges)
nx.shortest_path(graph2,35524093,35365678,weight = 'length')
In [47]: nx.shortest_path(graph2,35524093,35365678,weight = 'length')
NetworkXNoPath: No path to 35365678.
答案 0 :(得分:0)
因此,我本人通过转换由graph2 = ox.gdfs_to_graph(gdf_nodes,gdf_edges)得到的有向图'graph2'来解决了该问题。 使用一个无向图 graph2 = graph2.to_undirected()。
graph2 = ox.gdfs_to_graph(gdf_nodes, gdf_edges)
graph2 = graph2.to_undirected()
In [72]: nx.shortest_path(graph2,35524093,35365678,weight = 'length')
Out[72]: [35524093, 53132201, 35524331, 1994687832, 35365678]