python - Shapely 中的多边形不闭合

标签 python shapely

使用 Shapely 创建多边形时,我在多边形函数中推送 4 个顶点。输出应该是一个包含 5 个元素的元组(第一个顶点加倍,也被描述为最后一个顶点)。

然而,我传递给函数的输入顶点的顺序似乎会影响结果:有时多边形用 5 个顶点(理应如此)描述,有时用 4 个顶点描述 - 这意味着,它不是一个闭合多边形(或者换句话说 - 它根本不是多边形)它一定是一些错误。

在下面的示例中,poly1 和 Poly 2 之间的唯一区别是我通过的顶点的顺序。但方向完全相同:

from shapely.geometry import Polygon

print ('poly1 = ', Polygon([(620, 420, 500), (620, 420, 0), (620, 40, 0),(620, 40, 500)]))
print ('poly2 = ',Polygon([(620, 40, 500), (620, 420, 500), (620, 420, 0), (620, 40, 0)]))

但是,结果不同——一个是封闭多边形,另一个是开放多边形。 顺便说一句,两者的类型仍然是形状优美的多边形。

poly1 =  POLYGON Z ((620 420 500, 620 420 0, 620 40 0, 620 40 500, 620 420 500))
poly2 =  POLYGON Z ((620 40 500, 620 420 500, 620 420 0, 620 40 0))

有什么解决办法吗?

最佳答案

我认为这与第三个坐标有关。在文档( shapely doc )中,它告诉:

A third z coordinate value may be used when constructing instances, but has no effect on geometric analysis. All operations are performed in the x-y plane.

这意味着 shapely 根本不处理 z 坐标。在您的示例中,如果删除 z 坐标,您将得到:

[(620, 420), (620, 420), (620, 40), (620, 40)]
[(620, 40), (620, 420), (620, 420), (620, 40)]

当您传递线性字符串来构建多边形时,shapely Polygon 构造函数会检查最后一个点是否等于第一个点。如果不是,则添加该点以获得线性环。 在第二种情况下,据shapely所见,最后一个坐标已经重复,不需要添加任何其他点。

关于python - Shapely 中的多边形不闭合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39317261/

相关文章:

python - 为什么不能将 print 函数传递给 python 中的 dir()?

python - 计算每个场点在轮廓内的频率

python - Paramiko BindAddress 选项

python - VSCode pytest 测试发现失败

geopandas - 如何在一行 geopandas 数据框中创建多多边形形状几何?

python - 安装 python shapely 时出现 Alpine 错误

python - 如何从python的中心点创建坐标网格?

python - 使用 XlsxWriter 对行进行分组

python - 我需要编写一个Python代码来接受用户的数字并将其转换为二进制而不使用函数或bin?