多边形不会在 Shapely 中闭合
Polygon does not close in 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可以看出,最后一个坐标已经重复了,不需要再添加任何其他点。
使用 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可以看出,最后一个坐标已经重复了,不需要再添加任何其他点。