如何在NetworkX中删除边数少于10的OSM孤立子图?
基于边数过滤NetworkX中的孤立道路子图
完全可行,你可以借助NetworkX的连通分量工具实现这个需求,具体步骤和代码如下:
实现思路
- 提取图中所有连通分量(对应你所说的“孤立网络”)
- 逐个统计每个分量对应子图的边数
- 保留边数≥10的子图,合并得到过滤后的新图
代码示例
假设你已经通过OSMx加载并构建了NetworkX图G:
import networkx as nx # 获取无向连通分量(若为有向道路网络,根据需求改用nx.weakly_connected_components或nx.strongly_connected_components) connected_components = nx.connected_components(G) # 筛选符合边数要求的子图 qualified_subgraphs = [] for component in connected_components: subgraph = G.subgraph(component) if len(subgraph.edges()) >= 10: qualified_subgraphs.append(subgraph) # 合并所有合格子图,得到最终过滤后的图 filtered_graph = nx.union_all(qualified_subgraphs)
关键注意点
- 若处理的是有向道路网络(需考虑单行道方向),要根据分析场景选择连通分量判断方式:
weakly_connected_components:忽略道路方向,只要节点间有路径连通就视为同一分量strongly_connected_components:严格遵循道路方向,只有双向可达才视为同一分量
- 你设置的
retain_all=True会保留原始图中所有孤立分量,这是后续过滤的必要前提,无需调整 - 该方法不会修改原始图,而是生成新的过滤后图,方便你对比原始数据和处理结果
内容的提问来源于stack exchange,提问作者Santiago Cardona Urrea
相关产品推荐
相关产品推荐

