我可以设置形状多边形中的点的顺序吗?

Jam*_*ull 5 python gis shapely

我有一组Polygon对象,需要以可重复的方式迭代它们的每个边缘。我首选的方法是从最近点到边界框左下角的逆时针方向。

我可以通过以下方式确保多边形点是逆时针的:

polygon = shapely.geometry.polygon.orient(polygon)
Run Code Online (Sandbox Code Playgroud)

我可以使用以下方法找到我想要的起点:

polygon = shapely.geometry.Polygon(...)
lower_left = shapely.geometry.Point(bbox[:2])
nearest_pt = min(self.polygon.exterior.coords, 
                  key=lambda x: shapely.geometry.Point(x).distance(lower_left))
Run Code Online (Sandbox Code Playgroud)

我的问题是如何使LinearRing对象Polygon从那个角开始?

Jam*_*ull 4

这可行,但可能效率不高。

perimeter = polygon.exterior.coords
new_coords = []
first_vertex = nearest_pt  # as found in the question above
two_tours = itertools.chain(perimeter, perimeter)
for v in two_tours:
    if shapely.geometry.Point(v) == first_vertex:
        new_coords.append(v)
        while len(new_coords) < len(perimeter):
            new_coords.append(two_tours.next())
        break
polygon = shapely.geometry.Polygon(new_coords)
Run Code Online (Sandbox Code Playgroud)