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

