如何从匀称的点列表中创建匀称的多边形?

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]) 听起来你有嵌套点(多点?)还是一条线?

以上是关于如何从匀称的点列表中创建匀称的多边形?的主要内容,如果未能解决你的问题,请参考以下文章

如何在python中获取多边形内的点列表?

javascript中的python身材匀称的unary_union

(如何)在 boost 几何中创建自己的多边形类型并使用 multi_polygon 类型?

Python中matplotlib默认绘制的条形图比较胖?如何设置成体型匀称的条形图,达到最佳的可视化效果。

如何在 C# 中创建一个包含数组但不使用堆的结构?

使用 JTS,如何从外部点找到多边形边界上最近的点?