当前位置: 首页 > 知识库问答 >
问题:

OSMnx使用networkx查找有向图的最短路径

卢黎明
2023-03-14

在OSMnx中,街道的定向是为了保持单向性,因此,当我尝试使用Networkx查找最短路径时,我得到NetworkXNoPath:No path to(osmid)。如何解决此问题?我需要在具有单向街道的网络中找到最短路径。

见下面的代码:

import osmnx as ox

import networkx as nx
# define place
centreLat=40.771687
centreLon=-73.957233

# download osm data

G= ox.graph_from_point((centreLat,centreLon), distance=1000, network_type='drive',simplify = True)  

# plot the graph
fig,ax = ox.plot_graph(G)

# Get origin x and y coordinates
orig_xy = 40.7647425, -73.9683181

# Get target x and y coordinates
target_xy =40.7804348, -73.9498809

# Find the node in the graph that is closest to the origin point (here, we want to get the node id)
orig_node = ox.get_nearest_node(G, orig_xy, method='euclidean')


# Find the node in the graph that is closest to the target point (here, we want to get the node id)
target_node = ox.get_nearest_node(G, target_xy, method='euclidean')

# Get shortest path 
route = nx.shortest_path(G, source=orig_node, target=target_node, weight='length')

# Plot the shortest path
fig, ax = ox.plot_graph_route(G, route, origin_point=orig_xy, destination_point=target_xy)

共有1个答案

卫寒
2023-03-14

通过创建有向图的强连接组件来解决此问题,以确保每个顶点都可以从其他每个顶点访问。

G=ox.geo_utils.get_largest_component(G,strongly=True)
 类似资料:
  • 这个问题是NetworkX特有的。我可以创建自己的函数来完成所有我需要的事情,但是这需要更长的时间,所以我想避免它。 情况: 我有一个未加权图,由NetworkX无向图表示。从这个图中,我寻找“最短循环”——也就是说,对于给定的节点k,我正在寻找最短的简单路径(只通过一个节点一次),它离开k,然后返回k。 为了实现这一点,我想使用任何NetworkX最短路径算法,并从节点k到节点k进行搜索。问题是

  • 我有一个人际网络。我可以通过使用Networkx创建有向图来显示它们的连接方式。 下面是一个代码示例: 我还可以计算两个节点之间的最短路径。然而,我坚持的是如何强调这条“最短路径”。任何指点都将不胜感激。顺便说一句,我是个新手

  • 在一个加权有向图中,我需要找到两个结点s,t之间的最短路径。以下是限制: 权重可以为负值。 路径必须经过一个特定的边,让我们从节点u到V调用her e和shes。 输出路径必须简单,即我们只通过一个节点一次。 因为我希望它最短,所以我将检查在从s到u之前从v到t运行bellman ford是否比相反的方式更快(如果有节点,两个节点都使用where是放置它的最佳位置)。 谢谢你的帮助!

  • 给出了一个边上具有任意权的有向无环图和两个特定结点s和t,其中s的内度和t的外度为0。如何确定成本为正的s到t的最短路径?

  • 我想计算标记图中具有相同标签的节点的平均最短路径。例如,红色标记为A,黑色标记为B。 V_m是具有相同标签的顶点。n{i,j}是最短路径数,d{i,j}是测地距离。 我想使用Networkx来实现它。开始使用节点属性进行标记。 我可以用 现在我只想将键/值对保留在标签为例如“A”的位置。因此,我可以关注具有相同标签的节点。我希望它不是抽象的,但你有什么想法吗? 提前谢谢。

  • 我有一个加权和无向图,有顶点。其中两个顶点是和。 我需要找到最短的路径,从开始,在结束,并通过G的所有顶点(以任何顺序)。 如何做到这一点? 这不是旅行推销员问题:我不需要访问每个顶点一次,也不想回到第一个顶点。