如何在Shapely中查找联合多边形下的不连通多边形组
识别同一颜色并集中互不连通的多边形组的实现方法
核心逻辑
要解决这个问题,本质是对单颜色并集后的多边形集合做连通性分析——判断哪些多边形属于同一个连通分量(互相连通的组),最终拆分出独立的分组。
具体实现方案
1. 拓扑遍历法(通用场景)
- 从目标颜色的多边形列表中选一个未标记的多边形作为起始点。
- 遍历所有未标记的多边形,检查它和当前组内的任意多边形是否存在有效连通关系(通常是共享边,若允许顶点接触也算连通可调整判断逻辑)。
- 把所有连通的多边形归为同一组并标记,重复此过程直到所有多边形都被分组。
2. 借助空间分析库快速实现(以Python为例)
用shapely库的拓扑分析能力可以简化开发:
from shapely.geometry import Polygon from shapely.ops import unary_union # 假设pink_polygons是你已合并后的粉色六边形多边形列表 pink_polygons = [...] # 替换为实际数据 groups = [] processed_indices = set() for idx, poly in enumerate(pink_polygons): if idx in processed_indices: continue # 筛选未处理的多边形 unprocessed = [pink_polygons[j] for j in range(len(pink_polygons)) if j not in processed_indices] # 计算未处理多边形的并集,拆分出所有连通部件 union_result = unary_union(unprocessed) # 为每个连通部件匹配原始多边形,形成分组 for part in union_result.geoms: current_group = [p for p in unprocessed if p.intersects(part) and not p.disjoint(part)] # 更新已处理索引 processed_indices.update([pink_polygons.index(p) for p in current_group]) groups.append(current_group)
这段代码会自动把同一颜色下连通的多边形归为一组,最终groups里就是所有独立的粉色六边形组。
3. 规则六边形网格专属优化法
如果你的六边形是规则排列的网格(有固定坐标体系),可以直接通过坐标判断连通:
- 给每个六边形分配轴向坐标(q, r),连通的六边形坐标满足邻接规则:坐标差值为(±1,0)、(0,±1)、(±1,∓1)。
- 遍历所有六边形,通过坐标邻接关系快速分组,效率比拓扑判断高很多。
内容的提问来源于stack exchange,提问作者Mayank Rawat
相关产品推荐
相关产品推荐

