2016-04-07 9 views
3

Ich habe eine Gruppe von Polygon Objekten und muss wiederholbar durch jede ihrer Kanten durchlaufen. Meine bevorzugte Methode ist gegen den Uhrzeigersinn vom nächsten Punkt bis zur unteren linken Ecke der Bounding Box.Kann ich die Reihenfolge der Punkte in einem formschönen Polygon festlegen?

kann ich die Polygonpunkte sind gegen den Uhrzeigersinn um sicherzustellen, dass:

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

ich meine gewünschten Startpunkt unter Verwendung finden können:

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)) 

Meine Frage ist, wie kann ich die LinearRing des Fabrikats Polygon Objekt von dieser Ecke aus starten?

Antwort

2

Das funktioniert, aber es ist möglicherweise nicht sehr effizient.

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)