OSMnx中挪威汽车渡轮缺失问题求助
OSMnx获取挪威驾驶网络中汽车渡轮的问题解决
核心问题分析
你遇到两个关键问题:
- 使用
custom_filter='["route"~"ferry"]'会同时获取汽车渡轮和客运渡轮,无法精准筛选汽车渡轮 - 部分已在OpenStreetMap中存在的重要汽车渡轮(如Dragsvik至Vangsnes航线)无法通过现有代码抓取到
解决方案
1. 精准筛选汽车渡轮
OpenStreetMap中,汽车渡轮会带有motor_vehicle=yes的属性标签,你可以通过组合标签过滤出仅允许机动车通行的渡轮,修改custom_filter为:
["route"~"ferry"]["motor_vehicle"~"yes"]
这个筛选条件会只保留标记为渡轮且允许机动车通行的路线,自动排除客运渡轮。
2. 解决渡轮缺失问题
你的代码中network_type='all'会先应用OSMnx默认的道路筛选规则,可能和自定义筛选条件产生冲突,过滤掉部分渡轮关系。建议调整以下两点:
- 将
network_type设置为'none',完全由自定义筛选条件控制抓取范围,避免默认规则干扰 - 确保抓取逻辑覆盖OSM中的**关系(relation)**类型(很多渡轮航线以关系形式存在)
修正后的代码示例:
center_point = (61.19516867153809, 6.601287878776234) # 仅抓取允许机动车的汽车渡轮 G_balestrand_car_ferries = ox.graph.graph_from_point( center_point, dist=10000, dist_type='bbox', network_type='none', # 禁用默认网络类型筛选 custom_filter='["route"~"ferry"]["motor_vehicle"~"yes"]', retain_all=True, truncate_by_edge=True ) # 抓取所有道路网络 G_balestrand_all = ox.graph.graph_from_point( center_point, dist=10000, dist_type='bbox', network_type='all', retain_all=True, truncate_by_edge=True ) # 可视化 m = folium.Map(location=center_point, zoom_start=12) ox.graph_to_gdfs(G_balestrand_all, nodes=False).explore(m=m, color="blue") ox.graph_to_gdfs(G_balestrand_car_ferries, nodes=False).explore(m=m, color="red")
额外检查点
- 确认目标渡轮在OSM中的属性:Dragsvik至Vangsnes渡轮需同时具备
route=ferry和motor_vehicle=yes标签,若标签缺失则无法被抓取(可直接在OSM官网查询该航线的属性) - 确保使用最新版本的OSMnx,旧版本可能存在关系数据抓取的bug
内容的提问来源于stack exchange,提问作者Trygve Leithe Svalheim
相关产品推荐
相关产品推荐

