如何从匀称的点列表中创建匀称的多边形?
Posted
技术标签:
【中文标题】如何从匀称的点列表中创建匀称的多边形?【英文标题】:How to create a shapely Polygon from a list of shapely Points? 【发布时间】:2015-08-08 00:59:22 【问题描述】:我想从形状点创建一个多边形。
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()
如何从匀称的Point
对象创建Polygon
?
【问题讨论】:
我在 GitHub 上提交了一个关于此的问题:Inconsistency in creating collections with a sequence of Point's。他们说这是一个需要修复的错误。 这个问题已经过时了;它不再产生错误。见亚当的回答。 【参考方案1】:在1.7a2
版本中,他们已修复此问题。
有问题的代码可以正常工作。
Link to CHANGES.txt
【讨论】:
【参考方案2】:Polygon
构造函数不需要Point
对象列表,而是点坐标列表。
见https://shapely.readthedocs.io/en/latest/manual.html#polygons
【讨论】:
这个答案已经过时,不再正确 - 请参阅亚当的答案【参考方案3】:Polygon
对象需要嵌套的数字列表,而不是 Point
对象的列表。
polygon = Polygon([[0, 0], [1, 0], [1, 1], [0, 1]])
【讨论】:
【参考方案4】:如果您特别想从形状匀称的几何点构造多边形,请在列表推导中调用它们的 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 足够聪明,可以代表您关闭多边形,即您不必在最后再次传入第一个点。
【讨论】:
对我来说就像 poly = Polygon([[p[0].x, p[0].y] for p in pointList]) 听起来你有嵌套点(多点?)还是一条线?以上是关于如何从匀称的点列表中创建匀称的多边形?的主要内容,如果未能解决你的问题,请参考以下文章
javascript中的python身材匀称的unary_union
(如何)在 boost 几何中创建自己的多边形类型并使用 multi_polygon 类型?