OSMnx与NetworkX:如何获取同一路径的总长度与行驶时间?
优化方案:基于最短路径计算对应权重(NetworkX 3.1、OSMnx 1.5.1)
问题背景
你需要先获取长度最短的路径,再计算该路径对应的行驶时间,避免nx.shortest_path_length()因使用不同权重(travel_time/length)返回不同路径的问题。
优雅高效的实现方式
无需手动遍历边累加,直接使用NetworkX内置的nx.path_weight()函数即可完成计算,该函数内部经过优化,性能优于自定义循环:
# 1. 获取按长度优先的最短路径 route = nx.shortest_path(route_graph, start_node, destination_node, weight='length') # 2. 计算该路径的总长度(单位:米) total_length = nx.path_weight(route_graph, route, weight='length') # 3. 计算该路径的总行驶时间(单位:秒) total_travel_time = nx.path_weight(route_graph, route, weight='travel_time')
方案优势
- 代码简洁:替代手动循环边的繁琐逻辑,可读性更强
- 性能更优:NetworkX内置函数采用优化实现,比自定义循环效率更高
- 避免异常:自动处理OSMnx默认创建的
MultiDiGraph类型,无需手动处理边的key下标问题(函数会自动选取节点间的第一条边,与你原代码逻辑一致)
内容的提问来源于stack exchange,提问作者Kevin P.
相关产品推荐
相关产品推荐

