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!
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
Commentaire le plus utile
Encore un peu plus vite :