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

使用graph_from_bbox自定义过滤器后节点数增多的问题咨询

问题原因与解决方案

为什么带过滤器的节点数更多?

  • simplify参数是核心差异:你带过滤器的代码用了simplify=False,这会保留OpenStreetMap里的所有原始节点——包括每条街道中间的所有非交汇点节点;而不带过滤器的代码用了simplify=True,OSMnx会自动合并那些只连接同一条道路的连续节点,只保留街道交汇处的节点,这直接导致节点数量大幅减少。
  • 过滤器逻辑冗余且可能引入额外道路:你的custom_filter里写了["highway"~"."],这会匹配所有带highway标签的元素,包括一些默认drive网络类型会过滤掉的道路类型。虽然你排除了人行道和服务道路,但可能引入了更多原本被drive类型过滤的道路,进一步增加了节点总量。

你的代码是否符合需求?

当前代码不符合需求:

  • 没有开启simplify=True,无法删除非街道交汇处的节点;
  • 过滤器逻辑有冗余,还可能引入不必要的道路。

修正后的代码

import osmnx as ox
import networkx as nx
ox.settings.bidirectional_network_types = ["drive"]

# bounds 是你定义的边界字典

# 优化过滤器:只保留适合驾车的道路,同时排除人行道和服务道路
cf = ('["area"!~"yes"]["highway"!~"footway|service"]["highway"~"motorway|trunk|primary|secondary|tertiary|unclassified|residential"]')
G4 = ox.graph_from_bbox(
            bounds["max_lat"], bounds["min_lat"], bounds["max_lon"], bounds["min_lon"], 
            simplify = True,  # 关键:开启节点精简
            retain_all = False,
            network_type = 'none',  # 使用custom_filter时设为none避免冲突
            custom_filter=cf
            )
print(len(G4.nodes))

额外说明

  • simplify=True是实现“删除非两条及以上街道交汇处节点”的核心参数,必须开启;
  • 自定义过滤器里明确列出允许的道路类型,比["highway"~"."]更精准,避免引入无关道路;
  • 使用custom_filter时,把network_type设为'none',这样OSMnx不会再用默认的drive类型过滤规则,完全遵循你的自定义过滤器。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 18:06:10