Shapely 的
Polygon
和 LinearRing
不可迭代(如果我没记错历史的话,不再可迭代)。我经常需要将它们的顶点作为 Point
对象(而不是元组)进行迭代,而我当前的解决方案似乎很麻烦。有没有比这更简单的方法,无需 NumPy 魔法?
poly = Polygon([Point(0, 0), Point(1, 0), Point(1, 1), Point(0, 1)])
vertices = MultiPoint(np.column_stack(poly.exterior.coords.xy))
for p in vertices.geoms:
print(p)
MultiPoint
构造函数可以采用可迭代的元组,因此您可以使用 Polygon.exterior.coords
(返回 CoordinateSequence
)来执行此操作并跳过所有 NumPy/coords.xy 魔法。
from shapely import Polygon, Point, MultiPoint
poly = Polygon([Point(0, 0), Point(1, 0), Point(1, 1), Point(0, 1)])
points = MultiPoint(poly.exterior.coords)
for point in points.geoms:
print(point)
输出:
POINT (0 0)
POINT (1 0)
POINT (1 1)
POINT (0 1)
POINT (0 0)