Introduction
Extraire les coordonnées d'un polygone Shapely en Python est simple et peut être réalisé en accédant à l'attribut .coords de l'extérieur du polygone.
Ci-dessous se trouve un guide étape par étape sur la façon de le faire.
Créez un polygone en utilisant Shapely
Tout d'abord, vous devez importer les composants nécessaires de Shapely et créer un polygone. Voici un exemple:
from shapely.geometry import Polygon
import numpy as np
c1 = np.array((-5.0, -2.5))
c2 = np.array((-5.0, 7.5))
c3 = np.array((5, 7.5))
c4 = np.array((5, -2.5))
coords = (c1,c2,c3,c4)
myPolygon = Polygon( coords )
Ce code crée un simple carré en tant qu'objet polygonal.
Extraire les coordonnées du polygone
Maintenant, pour extraire les coordonnées du polygone, notamment de sa frontière extérieure, vous utiliserez l'attribut .coords
comme ceci :
X,Y = myPolygon.exterior.coords.xy
print(X)
print(Y)
Ce fragment de code affichera :
array('d', [-5.0, -5.0, 5.0, 5.0, -5.0])
array('d', [-2.5, 7.5, 7.5, -2.5, -2.5])
Veuillez noter que l'extrait de code ci-dessus renvoie des valeurs de type array.array
. Pour créer une liste, il suffit d'utiliser :
x_coords = list(X)
y_coords = list(Y)
print(x_coords)
print(y_coords)
Cela créera deux listes, x_coords
et y_coords
, qui contiennent les coordonnées x et y des coordonnées extérieures du polygone :
[-5.0, -5.0, 5.0, 5.0, -5.0]
[-2.5, 7.5, 7.5, -2.5, -2.5]
Ceci est utile pour un traitement ultérieur ou pour tracer le polygone sur un graphique.
Transformer les coordonnées de la forme en une liste de paires en utilisant la fonction zip :
list( zip(x_coords,y_coords) )
Les coordonnées sont répertoriées dans une paire de valeurs x et y adjacentes :
[(-5.0, -2.5), (-5.0, 7.5), (5.0, 7.5), (5.0, -2.5), (-5.0, -2.5)]
Pour améliorer le traitement ultérieur et la manipulation des coordonnées du polygone, la liste de paires peut être convertie en un tableau numpy en utilisant le code suivant :
np.asarray( list( zip(x_coords,y_coords) ) )
Le tableau résultant affichera les coordonnées x et y en conséquence:
array([[-5. , -2.5],
[-5. , 7.5],
[ 5. , 7.5],
[ 5. , -2.5],
[-5. , -2.5]])
Une méthode alternative consiste à exécuter le code suivant :
list(myPolygon.exterior.coords)
Cela renverra une liste de tuples, où chaque tuple contient les coordonnées X et Y d'un sommet dans la limite extérieure :
[(-5.0, -2.5), (-5.0, 7.5), (5.0, 7.5), (5.0, -2.5), (-5.0, -2.5)]
Cela nous permet d'accéder facilement et de manipuler les coordonnées individuelles pour des applications plus avancées.
Remarque : La sortie inclut le point de départ à la fin également pour signifier la fermeture du polygone. Si votre polygone comporte des trous et que vous souhaitez extraire leurs coordonnées également, vous pouvez utiliser polygon.interiors.
Maintenant que nous avons extrait avec succès les coordonnées d'un polygone, nous pouvons les utiliser à diverses fins. Par exemple, nous pouvons calculer la superficie du polygone en utilisant une formule qui prend en compte les coordonnées X et Y.
Une autre application utile est de tracer le polygone sur une carte en utilisant une bibliothèque telle que matplotlib
ou folium
. Cela nous permet de visualiser la forme du polygone et sa relation spatiale avec d'autres éléments sur la carte.
from matplotlib.pyplot import figure
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.patches as mpatches
fig = figure(num=None, figsize=(12, 10), dpi=100, edgecolor='k')
ax = plt.axes()
poly = mpatches.Polygon(np.stack( (X, Y), axis=1 ),
closed=True,
ec='k',
lw=1,
color='coral',
alpha=0.5)
ax.add_patch(poly)
plt.scatter(X,Y)
ax.grid(True)
ax.spines['left'].set_position('zero')
ax.spines['right'].set_color('none')
ax.spines['bottom'].set_position('zero')
ax.spines['top'].set_color('none')
plt.xlim(-10,10)
plt.ylim(-10,10)
plt.title('How to extract coordinates from a Shapely polygon in python ?')
plt.savefig("shapely_extract_polygon_coordinates_01.png", bbox_inches='tight', facecolor='white')
plt.show()
Références
Liens | Site |
---|---|
How to create and plot polygons in python using shapely and matplotlib ? | en.moonbooks.org |
shapely user manual: polygons | shapely.readthedocs.io |
conda-forge / packages / shapely | anaconda.org |