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

如何通过Shapely获取对齐到网格的质心?

Shapely质心对齐网格的解决方案

问题原因

shapely.set_precision()仅对输入的几何对象(此处为多边形)的坐标做精度约束,不会自动将后续计算出的质心也对齐到目标网格。你得到的带小数的质心是精度处理后多边形的真实几何中心,需要额外处理才能对齐到整数网格。

解决方案

以下两种方法均可实现将质心坐标四舍五入到最近整数的需求:

方法1:手动提取坐标并四舍五入

直接获取质心的x、y坐标,用round()函数处理后重新构建点对象:

from shapely import Polygon, Point, set_precision

coords = [...]  # 替换为你的多边形坐标列表
bbox = Polygon(coords)
# 对多边形进行精度约束
bbox_precise = set_precision(bbox, grid_size=1)
# 计算质心
centroid = bbox_precise.centroid
# 四舍五入坐标并构建对齐后的点
rounded_centroid = Point(round(centroid.x), round(centroid.y))
print(f'{rounded_centroid}')
# 输出示例:POINT (1125 1349)

方法2:用set_precision()直接处理质心

利用set_precision()支持点对象的特性,直接对质心应用网格约束,内部会自动将坐标对齐到最近的整数网格点:

from shapely import Polygon, set_precision

coords = [...]
bbox = Polygon(coords)
bbox_precise = set_precision(bbox, grid_size=1)
centroid = bbox_precise.centroid
# 对质心应用精度设置
aligned_centroid = set_precision(centroid, grid_size=1)
print(f'{aligned_centroid}')
# 输出示例:POINT (1125 1349)

说明

两种方法效果一致,方法2更符合Shapely的API使用逻辑,无需手动操作坐标值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 13:59:54