Python:Polygon不会关闭(形状

时间:2016-09-04 13:10:51

标签: 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)]))

然而,结果是不同的 - 一个是封闭的多边形,另一个是打开的。 btw的两种类型仍然是一个形状多边形。

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))

任何解决方案?

1 个答案:

答案 0 :(得分:1)

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

  

构造实例时可以使用第三个z坐标值,   但对几何分析没有影响。执行所有操作   在x-y平面上。

这意味着形状上不会处理z坐标。在您的示例中,如果删除z坐标,则得到:

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

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