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

如何使用Shapely库计算MultiPolygon(多多边形)的质心

Shapely 多多边形质心计算实现

首先明确一个常见误区:MultiPolygon 类和 Polygon 类的几何属性接口完全一致,centroid 属性可以直接调用,无法套用单多边形计算逻辑的核心原因是构造 MultiPolygon 时的传参方式错误——MultiPolygon 不接收嵌套的裸坐标列表,只接收 Polygon 对象组成的序列。

实现步骤

  • 遍历多层嵌套坐标列表,将每一组多边形坐标单独转换为 Polygon 对象
  • 用生成的 Polygon 对象序列构造 MultiPolygon 实例
  • 和单个多边形的质心计算逻辑完全一致,直接访问 .centroid 属性即可拿到结果

可直接运行的代码示例

from shapely.geometry import Polygon, MultiPolygon

# 输入的多多边形坐标列表
coordinate_list = [[[1,2], [2,3], [5,5]], [[0,0], [0,1], [1,0]]]

# 批量构造Polygon对象
poly_list = [Polygon(single_poly_coords) for single_poly_coords in coordinate_list]

# 构造MultiPolygon并计算质心
multi_polygon = MultiPolygon(poly_list)
centroid_res = multi_polygon.centroid

# 如需获取坐标值,直接访问x、y属性即可
print(f"质心坐标:({centroid_res.x}, {centroid_res.y})")

补充说明

  • 上述方法计算出的是多多边形的面积加权整体质心,是GIS领域的标准计算结果,不是多个多边形质心的算术平均值,结果符合几何计算规范
  • 如果输入的子多边形存在自相交、重叠等非法几何问题,可以先通过.is_valid属性做合法性校验,非法几何可以用buffer(0)方法快速修复后再参与计算
  • 不想显式构造MultiPolygon的话,也可以用unary_union合并所有多边形后直接取质心,计算结果完全一致:
from shapely.ops import unary_union
centroid_res = unary_union(poly_list).centroid

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 21:09:58