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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 22:05:22