Shapely的simplify方法无法移除多边形冗余顶点问题求解
问题原因
- 你要移除的
(20060.0, 20744.0)是当前多边形外环的首尾闭合锚点,shapely的simplify方法默认会保留多边形闭合路径的首尾锚点,哪怕该点和相邻点共线属于冗余点。 - 你使用的
simplify(0)虽然理论上会删除完全共线的点,但受锚点保留规则限制,首尾共线点不会被自动清理。
解决方法
可以先提取多边形的外环坐标,移除末尾重复的闭合点后简化,再重新构造多边形,就能删掉冗余的首尾共线点,示例代码如下:
from shapely.geometry import Polygon, LineString test = [(20060.0, 20744.0), (20060.0, 16729.0), (19000.0, 16729.0), (19000.0, 22564.0), (20060.0, 22564.0), (20060.0, 20744.0)] poly = Polygon(test) # 提取外环坐标,去掉末尾重复的闭合点 ext_coords = list(poly.exterior.coords)[:-1] # 转成LineString做简化,tolerance设为0即可删除完全共线点 simplified_line = LineString(ext_coords).simplify(0) # 重新构造多边形 simplified_poly = Polygon(simplified_line) print(list(simplified_poly.exterior.coords))
运行后的输出会自动移除冗余的(20060.0, 20744.0)点,结果如下:
[(20060.0, 16729.0), (19000.0, 16729.0), (19000.0, 22564.0), (20060.0, 22564.0), (20060.0, 16729.0)]
内容的提问来源于stack exchange,提问作者Stefan
相关产品推荐
相关产品推荐

