为何osmnx.distance.nearest_nodes返回相同节点?原get_nearest_node结果不同
问题分析:osmnx.nearest_nodes返回相同节点ID的原因
为何
osmnx.distance.nearest_nodes返回相同的节点ID:1422659162 1422659162 1422659162?而之前已弃用的get_nearest_node方法返回的是不同值。
用户代码示例:
origin = (43.8387129,-79.31549783) dist_1 = (43.8559083,-79.3040332) dist_2 = (43.8319896,-79.4621784) bbox = [43.81, 43.87, -79.29, -79.48] G = osmnx.graph_from_bbox(*bbox, network_type='drive_service') originId = osmnx.distance.nearest_nodes(G, origin[0], origin[1]) distId1 = osmnx.distance.nearest_nodes(G, dist_1[0], dist_1[1]) distId2 = osmnx.distance.nearest_nodes(G, dist_2[0], dist_2[1]) print(originId,distId1,distId2)
核心原因:坐标参数顺序传反
新旧方法的坐标参数逻辑完全不同:
- 已弃用的
get_nearest_node默认适配**(纬度, 经度)**的顺序(即(lat, lon)),和你定义的origin等元组格式匹配。 - 新方法
osmnx.distance.nearest_nodes的位置参数是(G, X, Y),其中X代表经度,Y代表纬度——你把纬度传给了X参数,经度传给了Y参数,导致三个点都被映射到同一个错误的地理位置,自然返回同一个节点ID。
修正方案
方案1:手动调换坐标顺序
将每个点的经度(元组第二个元素)放在前面,纬度(元组第一个元素)放在后面:
origin = (43.8387129,-79.31549783) dist_1 = (43.8559083,-79.3040332) dist_2 = (43.8319896,-79.4621784) bbox = [43.81, 43.87, -79.29, -79.48] G = osmnx.graph_from_bbox(*bbox, network_type='drive_service') # 调换顺序:经度在前,纬度在后 originId = osmnx.distance.nearest_nodes(G, origin[1], origin[0]) distId1 = osmnx.distance.nearest_nodes(G, dist_1[1], dist_1[0]) distId2 = osmnx.distance.nearest_nodes(G, dist_2[1], dist_2[0]) print(originId, distId1, distId2)
方案2:使用points参数更直观
nearest_nodes提供了points参数,直接接受**(纬度, 经度)**格式的点列表,内部会自动处理坐标转换,避免手动调换出错:
origin = (43.8387129,-79.31549783) dist_1 = (43.8559083,-79.3040332) dist_2 = (43.8319896,-79.4621784) bbox = [43.81, 43.87, -79.29, -79.48] G = osmnx.graph_from_bbox(*bbox, network_type='drive_service') # 直接传入(lat, lon)格式的点列表 node_ids = osmnx.distance.nearest_nodes(G, points=[origin, dist_1, dist_2]) print(node_ids)
内容的提问来源于stack exchange,提问作者Alaa
相关产品推荐
相关产品推荐

