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

使用Python+OSM数据计算步行距离始终返回0的问题求助

步行距离计算始终返回0的问题排查与解决

原因分析

  1. 节点匹配异常:对于Haversine距离非0的记录,若步行距离返回0,大概率是nearest_nodes将起终点坐标匹配到了同一个节点。可能是路网数据过滤过度,导致目标区域无有效步行节点。
  2. 过滤规则冲突:同时指定network_type='walk'和custom_filter会导致重复过滤,network_type='walk'已内置步行道路的筛选逻辑,自定义过滤可能误删必要的连通道路,引发节点匹配或路径计算异常。
  3. 路网数据损坏:荷兰全国步行路网数据量极大,获取或保存为pickle文件的过程中,可能出现数据丢失或属性错误(比如边的length被设为0)。

解决建议

1. 验证节点匹配结果

在循环中添加打印语句,确认非重合坐标是否匹配到不同节点:

for index, row in df.iterrows():
    origin = ox.distance.nearest_nodes(G_pedestrian, row['LongitudeDeparture'], row['LatitudeDeparture'])
    destination = ox.distance.nearest_nodes(G_pedestrian, row['LongitudeArrival'], row['LatitudeArrival'])
    print(f"行{index}: 起点节点={origin}, 终点节点={destination}")
    walking_distance = calculate_walking_distance(G_pedestrian, origin, destination)
    walking_distances.append(walking_distance)

若非重合坐标匹配到同一节点,说明路网数据未覆盖该区域,需调整路网获取规则。

2. 调整路网过滤规则

移除custom_filter参数,仅使用network_type='walk',避免过滤过度:

G_pedestrian = ox.graph_from_place('Netherlands', network_type='walk')

3. 检查路网边属性

随机抽取部分边,确认length属性是否正常:

# 查看前10条边的长度属性
for u, v, data in list(G_pedestrian.edges(data=True))[:10]:
    print(f"边{u}-{v}: 长度={data.get('length', '缺失')}")

若大量边的length为0或缺失,说明路网数据损坏,需重新获取。

4. 测试小规模路网

先尝试获取某城市(如阿姆斯特丹)的步行路网,验证计算逻辑是否正常:

G_test = ox.graph_from_place('Amsterdam, Netherlands', network_type='walk')
# 用阿姆斯特丹的两个坐标测试
origin_test = ox.distance.nearest_nodes(G_test, 4.8952, 52.3702)
dest_test = ox.distance.nearest_nodes(G_test, 4.9031, 52.3667)
print(nx.shortest_path_length(G_test, origin_test, dest_test, weight='length'))

若小规模路网计算正常,说明全国路网数据量过大导致异常,可考虑分区域获取后合并。

5. 重新生成路网文件

删除原pickle文件,重新获取并保存路网,避免数据损坏:

G_pedestrian = ox.graph_from_place('Netherlands', network_type='walk')
with open('G_pedestrian.pkl', 'wb') as f:
    pickle.dump(G_pedestrian, f)
# 重新加载测试
with open('G_pedestrian.pkl', 'rb') as f:
    G_loaded = pickle.load(f)

内容的提问来源于stack exchange,提问作者Wafa Dhool

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 21:59:54