Shapely: Convertir de una lista de puntos a un polígono

Creado en 24 ago. 2012  ·  3Comentarios  ·  Fuente: Toblerity/Shapely

Hola a todos,

No encontré una lista de correo de un foro, así que voy a preguntar aquí. ¿Existe una forma "canónica" para convertir de una lista de puntos a un polígono? Por ejemplo,

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)

Este código no funciona. Tuve que usar convex_hull:

poly = MultiPoint(list_points).convex_hull

Lo que no es exactamente lo que estoy buscando.

¡Gracias por la paciencia y el buen trabajo!

Comentario más útil

Un poco más rápido de nuevo:

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

Todos 3 comentarios

Aquí hay una cosa: los anillos de polígono (instancias de LinearRing) no están definidos por Puntos, están definidos por secuencias de tuplas de coordenadas. Los puntos y las coordenadas son cosas diferentes a Shapely. Debe pasar las coordenadas de los puntos al constructor de polígono. Como esto:

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

Como sigo buscando en Google de vez en cuando, así es como prefiero hacerlo (lo encuentro más legible así):

>>> 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 dice que las cosas pueden estar almacenadas en caché, pero el enfoque de @sgillies parece consistentemente 2/3 más rápido (~ 65 µs mío frente a ~ 45 µs de él), así que si necesitas un rendimiento super ultra hardcore para miles de millones de puntos o polys, considéralo.

Un poco más rápido de nuevo:

points = [Point(0,0), Point(2,2), Point(2,0)]
coords = [p.coords[:][0] for p in points]
poly = Polygon(coords)
poly.area
¿Fue útil esta página
0 / 5 - 0 calificaciones

Temas relacionados

chivasblue picture chivasblue  ·  3Comentarios

akadouri picture akadouri  ·  4Comentarios

mikedh picture mikedh  ·  6Comentarios

dopplershift picture dopplershift  ·  3Comentarios

mromanie picture mromanie  ·  3Comentarios