2016-04-07 76 views
3

我有一組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)) 

我的問題是如何使的的LinearRing

polygon = shapely.geometry.polygon.orient(polygon) 

我可以用找到我想要的起點Polygon對象從那個角落開始?

回答

2

這可行,但它可能不是很有效。

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) 
相關問題