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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 04:05:22