2016-04-07 13 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) 
関連する問題