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

如何使用OSMNX简化无向道路网络图(忽略单向路限制)

问题:在OSMNX中简化无向道路网络
  • 交通模拟研究中使用OpenStreetMap数据,需借助OSMNX的simplify_graph函数获取道路网络的简化图
  • 需求为忽略单向路属性:无论道路是单向还是双向,都统一表示为单条无向边,最终得到无向图而非有向图
  • 核心问题:simplify_graph仅支持有向图(MultiDiGraph),处理时因某段单向路存在,导致相邻的三段道路(对应OSM way ID:46678071、110711994、237298378)无法合并,不符合需求

图简化问题示意图

当前使用的代码如下:

ox.settings.log_console = True
G = ox.graph_from_xml("osm_network_agglomeration_montreal.xml",
                               simplify=False,
                               retain_all=True,
                               bidirectional=False)

# 仅保留指定区域内的图
G = ox.truncate.truncate_graph_polygon(G, boundary_polygon)


# 根据道路类型筛选边
allowed_highway_types = ["primary", 
                         "secondary", 
                         "tertiary"]
edges_subset = []
for u, v, data in G.edges(data=True):
    if data['highway'] in allowed_highway_types:
        edges_subset.append((u, v, 0))

G_subset = G.edge_subgraph(edges_subset)

#G_subset = ox.get_undirected(G_subset) # 不能这么做,因为simplify_graph仅支持有向图

# 简化图:移除中间节点
G_truncated = ox.simplify_graph(G_subset, strict=True, remove_rings=False)

# 转换为无向图:仅保留几何不同的平行边
G_truncated = ox.get_undirected(G_truncated)

gdf_nodes, gdf_links = ox.graph_to_gdfs(G_truncated)

# 删除不再需要的变量
#del G, edges_subset, G_subset 

请问:是否有方法简化无向图?若需要修改OSMNX代码并提交PR也可接受。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 23:45:34