如何根据所选边线选择最短路径?

问题描述 投票:0回答:1

我正在使用NetowrkX和OsmnX Python软件包来分析道路网络。获得简化图后,我想通过最短路径计算来评估网络的性能。为了获得特定的索引,我需要包含选择的边缘的最短路径的长度,这些最短路径是通过高速公路边缘的最短路径。

首先,我列出了我感兴趣的高速公路边缘(G5是我的网络的对应图:]

MW_edges=[(u,v,k,d) for u,v,k,d in G5.edges(keys=True, data=True) if  d['highway']=='motorway']

我使用以下函数来评估网络中所有节点对的最短路径:

paths=dict(nx.all_pairs_dijkstra_path(G5, cutoff=None, weight='length'))

如何获得/提取所需的最短路径,包括高速公路边缘?

python networkx shortest-path network-analysis osmnx
1个回答
0
投票

我无权访问您的图表或类似的玩具示例,而且我也无法完全获得您想要的东西。主要是:

  • 图形是否加权?您使用dijkstra的事实使我认为是事实,但是您在使用道路网络的事实使我认为事实并非如此。

  • 您的目标是什么?给定两个节点(假设sourcetarget),是否要获取组成它们之间最短路径的节点?还是想要所有节点对的所有最短路径?有多种功能针对这些功能进行了优化。

我做了一个玩具示例,其中给定两个节点,该算法返回组成它们之间最短路径的节点。然后找到边缘是微不足道的(只需从返回的列表中连续成对选取节点):

import networkx as nx
import matplotlib.pyplot as plt

nodes = [i for i in range(10)]
edges = [(i, i+1) for i in range(len(nodes)-1)] + [(nodes[0], nodes[-1])] + [(nodes[4], nodes[8])]
G = nx.Graph()
G.add_nodes_from(nodes)
G.add_edges_from(edges)

source, target = 4, 9
print("Shortest path between nodes {} and {} = {}"
      .format(source, target, nx.bidirectional_shortest_path(G, source, destination)))

nx.draw_networkx(G)

我离开了画线,以帮助更好地可视化事物。我还建议您看一下文档here,以更好地了解哪种算法更适合您的用例。如果我误解了,请纠正我!

© www.soinside.com 2019 - 2024. All rights reserved.