2015-05-26 27 views
7

Voglio creare un poligono dai punti formidabili.Come creare un poligono dato i suoi vertici punti?

from shapely import geometry 
p1 = geometry.Point(0,0) 
p2 = geometry.Point(1,0) 
p3 = geometry.Point(1,1) 
p4 = geometry.Point(0,1) 

pointList = [p1, p2, p3, p4, p1] 

poly = geometry.Polygon(pointList) 

mi dà un errore di tipo TypeError: object of type 'Point' has no len()

Come creare un Polygon da formose Point oggetti?

+0

Piggybacking off this - ci sono delle belle one-liner per generare un poligono dal risultato della chiamata 'bounds' su un oggetto Shapely? – kuanb

risposta

13

Se si desidera specificamente per costruire la vostra Poligono dal Punto geometria tornite, quindi chiamare i loro x, y proprietà in un elenco di comprensione. In altre parole:

from shapely import geometry 

poly = geometry.Polygon([[p.x, p.y] for p in pointList]) 

print(poly.wkt) # prints: 'POLYGON ((0 0, 1 0, 1 1, 0 1, 0 0))' 

Si noti che è formosa abbastanza intelligente per chiudere il poligono a vostro nome, vale a dire non si deve necessariamente passare-nel primo punto di nuovo alla fine.

+0

per me funziona come poly = Polygon ([[p [0] .x, p [0] .y] per p nella lista dei punti]) – Piyush

+0

Suoni come se avessi nidificato punti (multipunto?) O una linea? – shongololo

+1

Inoltre, non dimenticare di importare la libreria in gioco: da shapely.geometry import Polygon – inigo333

3

Un oggetto Polygon richiede un elenco nidificato di numeri, non un elenco di Point oggetti.

polygon = Polygon([[0, 0], [1, 0], [1, 1], [0, 1]]) 
+0

Questo non funzionerà come mostrato. Dovrebbe essere un elenco di coordinate di punti, ad esempio: poligono = poligono ([[0,0], [1,0], [1,1], [0,1]]) – shongololo

+0

@shongololo Grazie per l'heads up, Ho letto male i documenti. –

Problemi correlati