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

如何用Python脚本将MultiPolygon平滑合并为单个Polygon?

用Shapely合并MultiPolygon为单个Polygon的脚本

首先明确你的数据结构:你给出的MultiPolygon是扁平的坐标列表,其中每一组连续坐标点构成一个独立多边形(示例里每3个点对应一个三角形)。我们需要先拆分这个扁平列表,再用Shapely完成合并。

步骤1:安装Shapely

还没安装的话先执行:

pip install shapely

步骤2:完整脚本

from shapely.geometry import Polygon, MultiPolygon
from shapely.ops import unary_union

def flatten_multipolygon_to_single_polygon(flat_coords, polygon_point_count=3):
    # 1. 把扁平坐标拆分成单个多边形的坐标集合
    polygons = []
    for i in range(0, len(flat_coords), polygon_point_count):
        poly_coords = flat_coords[i:i+polygon_point_count]
        # 确保多边形坐标闭合(Shapely要求首尾点一致)
        if poly_coords[0] != poly_coords[-1]:
            poly_coords.append(poly_coords[0])
        polygons.append(Polygon(poly_coords))
    
    # 2. 创建Shapely的MultiPolygon对象
    multi_poly = MultiPolygon(polygons)
    
    # 3. 合并为单个Polygon:两种方式任选其一
    # 方式A:取所有多边形的凸包(简单粗暴,覆盖范围更大,符合你需求)
    merged_poly = multi_poly.convex_hull
    # 方式B:合并并集(更精准,但若多边形分离会返回MultiPolygon,需转成单个)
    # merged_poly = unary_union(multi_poly)
    # if isinstance(merged_poly, MultiPolygon):
    #     merged_poly = merged_poly.convex_hull
    
    # 4. 转换为你需要的坐标结构(去掉闭合用的重复首尾点)
    merged_coords = list(merged_poly.exterior.coords)
    if merged_coords[0] == merged_coords[-1]:
        merged_coords.pop()
    
    return merged_coords

# 示例用法
flat_multipoly_coords = [
    [0,0], [0,1], [1,0],  # 第一个三角形
    [2,2], [2,3], [3,2],  # 第二个三角形
    [1,3], [2,4], [3,3]   # 第三个三角形
]

result = flatten_multipolygon_to_single_polygon(flat_multipoly_coords)
print("合并后的单个Polygon坐标:")
print(result)

关键说明

  • 坐标拆分:脚本默认每个多边形固定3个点,若你的多边形点数不固定,需要调整拆分逻辑(比如提前传入每个多边形的点数量,或用分隔符标记多边形边界)。
  • 合并逻辑:
    • 凸包(convex_hull):直接生成包含所有点的最小凸多边形,完全满足你“允许覆盖不必要区域”的要求,逻辑最简单。
    • 并集(unary_union):多边形重叠时会生成精确合并区域,但多边形分离时返回MultiPolygon,需再转成凸包确保是单个Polygon。
  • 坐标闭合:Shapely的Polygon要求坐标首尾一致,脚本会自动处理,最后返回时移除重复点,匹配你需要的结构。

之前失败的可能原因

你给出的扁平坐标列表不是Shapely能直接识别的MultiPolygon格式,必须先拆分成单个Polygon的坐标集合,再创建MultiPolygon对象才能处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 13:25:14