如何使用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
相关产品推荐
相关产品推荐

