You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 05:25:23