我可以在形状匀称的多边形中设置点的顺序吗?
Can I set the order of points in a shapely Polygon?
我有一组 Polygon
个对象,需要以可重复的方式遍历它们的每条边。我的首选方法是从最接近边界框左下角的点逆时针旋转。
我可以通过以下方式确保多边形点是逆时针的:
polygon = shapely.geometry.polygon.orient(polygon)
我可以使用以下方法找到我想要的起点:
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))
我的问题是如何使 Polygon
对象的 LinearRing
从那个角开始?
这可行,但效率可能不高。
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)
我有一组 Polygon
个对象,需要以可重复的方式遍历它们的每条边。我的首选方法是从最接近边界框左下角的点逆时针旋转。
我可以通过以下方式确保多边形点是逆时针的:
polygon = shapely.geometry.polygon.orient(polygon)
我可以使用以下方法找到我想要的起点:
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))
我的问题是如何使 Polygon
对象的 LinearRing
从那个角开始?
这可行,但效率可能不高。
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)