如何使用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
相关产品推荐
相关产品推荐

