Comment Lire et Visualiser un Fichier Shapefile (.shp) avec Python
Les fichiers Shapefile sont l’un des formats les plus courants pour stocker des données géographiques vectorielles — points, lignes et polygones (par exemple : frontières de pays, périmètres d’incendies ou emplacements de fermes solaires).
Un shapefile est en réalité composé de plusieurs fichiers partageant le même nom de base, mais avec des extensions différentes :
| Extension | Description |
|---|---|
.shp |
Géométrie (points, lignes, polygones) |
.shx |
Index des formes |
.dbf |
Table attributaire (données tabulaires) |
.prj |
Système de coordonnées (projection) |
Table of contents
- Comment Lire et Visualiser un Fichier Shapefile (.shp) avec Python
- Installation des bibliothèques nécessaires
- Lecture d’un fichier Shapefile
- Vérifier le système de coordonnées (CRS)
- Comment visualiser les données
- Visualiser les données sur une carte satellite avec Folium
- Exemple de résultat
- Références
Installation des bibliothèques nécessaires
Assurez-vous d’avoir installé les bibliothèques suivantes :
1 | pip install geopandas matplotlib |
Lecture d’un fichier Shapefile
Supposons que votre fichier s’appelle global_solar_panels.shp et qu’il soit dans le même dossier que votre script ou notebook :
1 2 3 4 5 6 7 8 | import geopandas as gpd import matplotlib.pyplot as plt # Lecture du fichier shapefile gdf = gpd.read_file("global_solar_panels.shp") # Affiche les premières lignes print(gdf.head()) |
Cette commande charge automatiquement la géométrie et les attributs (provenant du fichier .dbf).
Vérifier le système de coordonnées (CRS)
Il est important de connaître le système de coordonnées utilisé (par exemple WGS84, EPSG:4326).
1 | print(gdf.crs) |
Si votre jeu de données n’a pas de CRS défini, ou s’il n’est pas en latitude/longitude (EPSG:4326), vous pouvez le convertir :
1 2 | if gdf.crs is None or gdf.crs.to_epsg() != 4326: gdf = gdf.to_crs(epsg=4326) |
Comment visualiser les données
La façon de visualiser un shapefile dépend de la taille du jeu de données.
Les fichiers volumineux (par ex. données mondiales) peuvent ralentir l’affichage, il est donc souvent utile d’en inspecter un sous-ensemble d’abord.
Vérifier la taille du GeoDataFrame
Avant de tracer, il est recommandé de vérifier le nombre d’entités contenues dans le shapefile :
1 | print(f"Nombre de lignes (entités) dans le GeoDataFrame : {len(gdf)}") |
Cela vous aide à décider s’il vaut mieux tracer tout le jeu de données ou seulement un échantillon.
Créer un échantillon pour tester
Si votre shapefile est volumineux, vous pouvez tracer un sous-échantillon aléatoire pour tester le code ou la structure des données :
1 2 3 4 5 6 7 8 9 | # Échantillon de 1000 entités (à ajuster selon les besoins) gdf_sample = gdf.sample(1000, random_state=42) # Tracé de l’échantillon gdf_sample.plot(figsize=(10, 8), edgecolor='black', alpha=0.6) plt.title("Échantillon des entités du shapefile") plt.xlabel("Longitude") plt.ylabel("Latitude") plt.show() |
Astuce : Utiliser un échantillon accélère l’affichage et facilite l’exploration des données sans charger l’ensemble complet.

Tracer le shapefile complet
Une fois les données vérifiées, vous pouvez facilement afficher l’ensemble complet :
1 2 3 4 5 | gdf.plot(figsize=(12, 10), edgecolor='gray', alpha=0.5) plt.title("Visualisation complète du shapefile") plt.xlabel("Longitude") plt.ylabel("Latitude") plt.show() |
Visualiser les données sur une carte satellite avec Folium
Installation des bibliothèques
Assurez-vous d’avoir installé les packages nécessaires :
1 | pip install geopandas folium |
Charger et échantillonner votre GeoDataFrame
Exemple :
1 2 3 4 5 6 7 | import geopandas as gpd import folium gdf = gpd.read_file("global_solar_panels.shp") # Prendre un petit échantillon si le jeu de données est grand gdf_sample = gdf.sample(1000) |
Créer une carte Folium avec un fond satellite
Vous pouvez utiliser Esri World Imagery comme fond satellite :
1 2 3 4 5 6 7 8 9 10 | # Calcul du centroïde pour centrer la carte center = [gdf_sample.geometry.centroid.y.mean(), gdf_sample.geometry.centroid.x.mean()] # Création de la carte m = folium.Map( location=center, zoom_start=5, tiles='https://server.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer/tile/{z}/{y}/{x}', attr='Esri World Imagery' ) |
Ajouter le GeoDataFrame à la carte
Superposez facilement vos géométries grâce à la couche GeoJson de Folium :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | # Sélectionner uniquement les colonnes non géométriques tooltip_fields = [col for col in gdf_sample.columns if col != 'geometry'] # Limiter à 5 champs pour plus de clarté tooltip_fields = tooltip_fields[:5] folium.GeoJson( gdf_sample, name="Échantillon du shapefile", style_function=lambda x: { "color": "yellow", "weight": 2, "fillOpacity": 0.3 }, tooltip=folium.features.GeoJsonTooltip(fields=tooltip_fields) ).add_to(m) folium.LayerControl().add_to(m) m |
(Optionnel) Enregistrer la carte interactive au format HTML
Vous pouvez exporter la carte interactive pour la visualiser dans n’importe quel navigateur :
1 | m.save("shapefile_sample_satellite.html") |
(Optionnel) Utiliser un autre fond de carte
Folium supporte plusieurs fournisseurs de fonds via folium.TileLayer.
Vous pouvez en ajouter plusieurs pour comparer :
1 2 3 4 5 6 7 | folium.TileLayer('OpenStreetMap').add_to(m) folium.TileLayer('Stamen Terrain').add_to(m) folium.TileLayer('Stamen Toner').add_to(m) folium.TileLayer('CartoDB positron').add_to(m) # Fond satellite Esri (déjà ajouté manuellement ci-dessus) folium.LayerControl().add_to(m) |
Exemple de résultat

Références
| Liens | Site |
|---|---|
| https://geopandas.org/en/stable/docs/user_guide/io.html | GeoPandas : Lecture et écriture de fichiers — guide officiel pour charger des shapefiles et GeoJSON. |
| https://geopandas.org/en/stable/docs/user_guide/mapping.html | GeoPandas : Visualisation de cartes — comment tracer des données géographiques avec Matplotlib. |
| https://python-visualization.github.io/folium/ | Documentation Folium — créer des cartes interactives Leaflet directement dans Python. |
| https://contextily.readthedocs.io/en/latest/ | Contextily — ajouter des fonds de carte (satellite, terrain, rues) aux tracés GeoPandas. |
| https://epsg.io/4326 | EPSG:4326 (WGS84) — référence standard du système de coordonnées géographiques. |
| https://matplotlib.org/stable/ | Documentation Matplotlib — bibliothèque de tracé utilisée par GeoPandas pour les cartes statiques. |
