这是我的代码:
import osmnx as ox
# Use the following commands to download the graph file of NYC
G = ox.graph_from_place('New York City', network_type='drive', simplify=True)
# Coordinates for origin and destination
orig_x = 40.6662
orig_y = -73.9340
dest_x = 40.6576
dest_y = -73.9208
# Find the nearest nodes
orig_node = ox.distance.nearest_nodes(G, orig_x, orig_y, return_dist=True)
dest_node = ox.distance.nearest_nodes(G, dest_x, dest_y, return_dist=True)
print(f"Origin node: {orig_node}, Destination node: {dest_node}")
# Calculate the shortest path
route = ox.shortest_path(G, orig_node, dest_node, weight='length')
travel_secs = sum(G[u][v][0]['length'] for u, v in zip(route[:-1], route[1:])) * 186.411821
print(f"Travel time (seconds): {travel_secs}")
我试图找到这两点之间的最短路径,但我得到“networkx.exception.NodeNotFound:源 15056632.490169104 或目标 15056625.267485507 不在 G 中” 抱歉,如果这是显而易见的事情,我是这个库的新手,还没有找到关于这个问题的任何好的文档。
这个错误是由于你如何将经纬度坐标传递给
nearest_nodes
函数造成的。
osmnx
库希望经纬度坐标按
(纬度, 经度)
顺序排列,而你却按
(经度, 纬度)
顺序提供。
在代码中更正此问题的方法如下:
# Find the nearest nodes
# 注意,经纬度顺序已经更改
orig_node = ox.distance.nearest_nodes(G, orig_y, orig_x, return_dist=True)
dest_node = ox.distance.nearest_nodes(G, dest_y, dest_x, return_dist=True)
print(f"Origin node: {orig_node}, Destination node: {dest_node}")
通过在调用
nearest_nodes
时交换
orig_x
/
orig_y
和
dest_x
/
dest_y
的顺序,你应该能正确找到节点并计算最短路径。
此外,
nearest_nodes
函数返回一个包含最近节点 ID 和到该节点距离的元组。要仅获取节点 ID 用于路径计算,你需要这样做:
orig_node = ox.distance.nearest_nodes(G, orig_y, orig_x) # 不需要 return_dist=True
dest_node = ox.distance.nearest_nodes(G, dest_y, dest_x) # 不需要 return_dist=True
进行这些更改后,你的代码应该可以正确找到节点并计算纽约市中两点之间的最短路径。
标签:python,osmnx From: 78780567