为何OSMNX新nearest_nodes与旧get_nearest_node结果不同?如何复现旧结果?
问题原因
1. 函数参数定义差异
旧版get_nearest_node的输入坐标顺序是(纬度lat, 经度lon),而新版nearest_nodes的参数要求是X=经度lon, Y=纬度lat,你代码里把经纬度传反了,才会返回错误的节点。
你给出的坐标中51开头的是纬度值,7开头的是经度值,你把纬度传给了X参数、经度传给了Y参数,相当于传入了完全错误的地理位置,两次查询的错误坐标刚好离同一个节点最近,所以两次nearest_nodes都返回了同一个节点ID317558105。两点相同的情况下计算出来的最短路径只有一个节点,调用绘图函数时子图没有边,就会抛出graph contains no edges的报错。
解决方法
调整nearest_nodes的参数传值,把经度传给X、纬度传给Y即可,修改后的代码如下:
# 原来的错误写法:orig = ox.nearest_nodes(G, X=51.262336765, Y=7.143472955) # 修正后的写法 orig = ox.nearest_nodes(G, X=7.143472955, Y=51.262336765) print(orig) # 和旧版get_nearest_node返回的279086833一致 dest = ox.nearest_nodes(G, X=7.1491453, Y=51.2521799) print(dest) # 和旧版get_nearest_node返回的269525495一致
修改后返回的节点就和旧版get_nearest_node完全一致,后续路径计算、绘图逻辑都可以正常运行。
内容的提问来源于stack exchange,提问作者katherinejohnson
相关产品推荐
相关产品推荐

