36

我想从匀称的点创建一个多边形。

from shapely import geometry
p1 = geometry.Point(0,0)
p2 = geometry.Point(1,0)
p3 = geometry.Point(1,1)
p4 = geometry.Point(0,1)

pointList = [p1, p2, p3, p4, p1]

poly = geometry.Polygon(pointList)

给我一个类型错误TypeError: object of type 'Point' has no len()

如何Polygon从匀称的Point物体创建一个?

4

4 回答 4

58

如果您特别想从形状匀称的几何点构造多边形,则在列表理解中调用它们的 x、y 属性。换句话说:

from shapely import geometry

poly = geometry.Polygon([[p.x, p.y] for p in pointList])

print(poly.wkt)  # prints: 'POLYGON ((0 0, 1 0, 1 1, 0 1, 0 0))'

请注意,shapely 足够聪明,可以代表您关闭多边形,即您不必在最后再次传入第一个点。

于 2015-05-26T14:44:51.853 回答
17

对象需要嵌套的Polygon数字列表,而不是Point对象列表。

polygon = Polygon([[0, 0], [1, 0], [1, 1], [0, 1]])
于 2015-05-26T11:28:31.407 回答
5

在版本1.7a2中,他们已经解决了这个问题。

有问题的代码将正常工作。

链接到 CHANGES.txt

于 2019-10-03T23:09:42.657 回答
2

构造Polygon函数不需要Point对象列表,而是点坐标列表。

https://shapely.readthedocs.io/en/latest/manual.html#polygons

于 2015-05-26T11:28:21.320 回答