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

如何用OSMnx构建街道与河流网络?自定义过滤器报错求解

OSMnx构建含街道与河流网络的解决方案

首先说明报错原因:你写的自定义过滤器["waterway"~"river"]["highway"~"primary|trunk"]是逻辑与关系,OSMnx会去查找同时属于河流(waterway=river)和主干道/干线公路(highway=primary|trunk)的元素,这种元素根本不存在,所以返回空响应报错。

两种可行解决方式

方式一:修改自定义过滤器为逻辑或

把过滤器改成Overpass QL支持的逻辑或语法,就能同时获取河流和街道元素:

country_graph = ox.graph_from_polygon(
    polygon=drc_boundary.geometry.iloc[0],
    simplify=True,
    retain_all=True,
    custom_filter='["waterway"~"river"] or ["highway"~"primary|trunk"]'
)

注意:OSMnx的graph_from_polygon原本是为道路网络设计的,河流作为非道路元素被加入后,图的节点、边属性可能和纯道路图有差异,后续处理(比如路径规划)需要额外调整属性逻辑。

方式二:分别获取后合并(更推荐)

这种方式能分别处理街道和河流的属性,灵活性更高:

  1. 获取街道网络:
street_graph = ox.graph_from_polygon(
    drc_boundary.geometry.iloc[0],
    simplify=True,
    retain_all=True,
    custom_filter='["highway"~"primary|trunk"]'
)
  1. 获取河流的几何要素(用geometries_from_polygon更适合非道路的地理要素):
rivers = ox.geometries_from_polygon(
    drc_boundary.geometry.iloc[0],
    tags={"waterway": "river"}
)
  1. 手动合并到同一图结构中:可以将河流的几何数据作为边添加到街道图里,或者创建新的混合图,根据你的需求调整节点和边的属性映射(比如给河流边标记特殊属性区分道路)。

总结

  • 若只是快速获取两种元素的集合,修改过滤器为逻辑或即可;
  • 若需要构建能正常使用的混合网络,分别获取再合并的方式更可靠,能避免不同要素属性冲突带来的问题。

内容的提问来源于stack exchange,提问作者Michelle Li

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 07:53:16