Shapely: Convertir à partir d'une liste de points en un polygone

Créé le 24 août 2012  ·  3Commentaires  ·  Source: Toblerity/Shapely

Salut tout le monde,

Je n'ai pas trouvé de liste de diffusion d'un forum, alors je vais demander ici. Existe-t-il un formulaire « canonique » pour convertir une liste de points en un polygone ? Par exemple,

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)

Ce code ne fonctionne pas. J'ai dû utiliser convex_hull :

poly = MultiPoint(list_points).convex_hull

Ce qui n'est pas exactement ce que je recherche.

Merci pour la patience et le bon travail!

Commentaire le plus utile

Encore un peu plus vite :

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

Tous les 3 commentaires

Voici le truc : les anneaux de polygone (instances de LinearRing) ne sont pas définis par des points, ils sont définis par des séquences de tuples de coordonnées. Les points et les coordonnées sont des choses différentes pour Shapely. Vous devez passer les coordonnées des points au constructeur Polygon. Comme ça:

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

Comme je continue à chercher cela de temps en temps sur Google, voici comment je préfère le faire (je le trouve plus lisible comme ça):

>>> 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 dit que les choses sont peut-être mises en cache, mais l' approche de

Encore un peu plus vite :

points = [Point(0,0), Point(2,2), Point(2,0)]
coords = [p.coords[:][0] for p in points]
poly = Polygon(coords)
poly.area
Cette page vous a été utile?
0 / 5 - 0 notes