Shapely: Konvertieren von einer Liste von Punkten in ein Polygon

Erstellt am 24. Aug. 2012  ·  3Kommentare  ·  Quelle: Toblerity/Shapely

Hallo zusammen,

Ich habe keine Mailingliste eines Forums gefunden, deshalb frage ich hier. Gibt es ein "kanonisches" Formular, um von einer Liste von Punkten in ein Polygon zu konvertieren? Zum Beispiel,

list_points = []
vertices = [Point(1,1), Point(2,2), Point(3,3)]
for i in xrange(len(vertices)):
    list_points.append(vertices[i])
polygon = Polygon(list_points)

Dieser Code funktioniert nicht. Ich musste convex_hull verwenden:

poly = MultiPoint(list_points).convex_hull

Was ist nicht genau das, was ich suche.

Danke für die Geduld und die gute Arbeit!

Hilfreichster Kommentar

Immer wieder etwas schneller:

points = [Point(0,0), Point(2,2), Point(2,0)]
coords = [p.coords[:][0] for p in points]
poly = Polygon(coords)
poly.area

Alle 3 Kommentare

Folgendes: Polygonringe (Instanzen von LinearRing) werden nicht durch Punkte definiert, sondern durch Folgen von Koordinatentupeln. Punkte und Koordinaten sind etwas anderes als Shapely. Sie müssen die Koordinaten der Punkte an den Polygon-Konstruktor übergeben. So was:

>>> points = [Point(0,0), Point(2,2), Point(2,0)]
>>> coords = sum(map(list, (p.coords for p in points)), [])
>>> poly = Polygon(coords)
>>> poly.area
2.0

Da ich ab und zu danach googele, mache ich es am liebsten so (ich finde es so lesbarer):

>>> points = [Point(0,0), Point(2,2), Point(2,0)]
>>> coords = [(p.x, p.y) for p in points]
>>> poly = Polygon(coords)
>>> poly.area
2.0

timeit sagt, dass die Dinge möglicherweise zwischengespeichert werden, aber der Ansatz von @sgillies scheint durchweg 2/3 schneller zu sein (~65 µs meiner gegenüber ~ 45 µs seiner).

Immer wieder etwas schneller:

points = [Point(0,0), Point(2,2), Point(2,0)]
coords = [p.coords[:][0] for p in points]
poly = Polygon(coords)
poly.area
War diese Seite hilfreich?
0 / 5 - 0 Bewertungen

Verwandte Themen

mromanie picture mromanie  ·  3Kommentare

kannes picture kannes  ·  4Kommentare

dopplershift picture dopplershift  ·  3Kommentare

doctor-ian picture doctor-ian  ·  4Kommentare

LostFan123 picture LostFan123  ·  5Kommentare