GeoPandas
GeoPandas étend pandas pour activer les opérations spatiales sur les types géométriques. Il combine les capacités de pandas et shapely pour l'analyse de données géospatiales.
Installation
uv pip install geopandas
Dépendances optionnelles
# Pour les cartes interactives
uv pip install folium
# Pour les schémas de classification en cartographie
uv pip install mapclassify
# Pour des opérations I/O plus rapides (accélération 2-4x)
uv pip install pyarrow
# Pour le support de base de données PostGIS
uv pip install psycopg2
uv pip install geoalchemy2
# Pour les cartes de base
uv pip install contextily
# Pour les projections cartographiques
uv pip install cartopy
Démarrage rapide
import geopandas as gpd
# Lire des données spatiales
gdf = gpd.read_file("data.geojson")
# Exploration basique
print(gdf.head())
print(gdf.crs)
print(gdf.geometry.geom_type)
# Tracé simple
gdf.plot()
# Reprojeter vers un CRS différent
gdf_projected = gdf.to_crs("EPSG:3857")
# Calculer la surface (utiliser un CRS projeté pour la précision)
gdf_projected['area'] = gdf_projected.geometry.area
# Enregistrer dans un fichier
gdf.to_file("output.gpkg")
Concepts fondamentaux
Structures de données
- GeoSeries : Vecteur de géométries avec opérations spatiales
- GeoDataFrame : Structure de données tabulaire avec colonne de géométrie
Voir data-structures.md pour les détails.
Lecture et écriture de données
GeoPandas lit/écrit plusieurs formats : Shapefile, GeoJSON, GeoPackage, PostGIS, Parquet.
# Lire avec filtrage
gdf = gpd.read_file("data.gpkg", bbox=(xmin, ymin, xmax, ymax))
# Écrire avec accélération Arrow
gdf.to_file("output.gpkg", use_arrow=True)
Voir data-io.md pour les opérations I/O complètes.
Systèmes de référence des coordonnées
Toujours vérifier et gérer le CRS pour des opérations spatiales précises :
# Vérifier le CRS
print(gdf.crs)
# Reprojeter (transforme les coordonnées)
gdf_projected = gdf.to_crs("EPSG:3857")
# Définir le CRS (uniquement quand les métadonnées manquent)
gdf = gdf.set_crs("EPSG:4326")
Voir crs-management.md pour les opérations CRS.
Opérations courantes
Opérations géométriques
Tampon, simplification, centroïde, enveloppe convexe, transformations affines :
# Tampon de 10 unités
buffered = gdf.geometry.buffer(10)
# Simplifier avec tolérance
simplified = gdf.geometry.simplify(tolerance=5, preserve_topology=True)
# Obtenir les centroïdes
centroids = gdf.geometry.centroid
Voir geometric-operations.md pour toutes les opérations.
Analyse spatiale
Jointures spatiales, opérations de superposition, dissolution :
# Jointure spatiale (intersecte)
joined = gpd.sjoin(gdf1, gdf2, predicate='intersects')
# Jointure du plus proche voisin
nearest = gpd.sjoin_nearest(gdf1, gdf2, max_distance=1000)
# Intersection de superposition
intersection = gpd.overlay(gdf1, gdf2, how='intersection')
# Dissoudre par attribut
dissolved = gdf.dissolve(by='region', aggfunc='sum')
Voir spatial-analysis.md pour les opérations d'analyse.
Visualisation
Créer des cartes statiques et interactives :
# Carte choroplèthe
gdf.plot(column='population', cmap='YlOrRd', legend=True)
# Carte interactive
gdf.explore(column='population', legend=True).save('map.html')
# Carte multi-couches
import matplotlib.pyplot as plt
fig, ax = plt.subplots()
gdf1.plot(ax=ax, color='blue')
gdf2.plot(ax=ax, color='red')
Voir visualization.md pour les techniques de cartographie.
Documentation détaillée
- Data Structures - Fondamentaux de GeoSeries et GeoDataFrame
- Data I/O - Lecture/écriture de fichiers, PostGIS, Parquet
- Geometric Operations - Tampon, simplification, transformations affines
- Spatial Analysis - Jointures, superposition, dissolution, découpage
- Visualization - Tracés, cartes choroplèthes, cartes interactives
- CRS Management - Systèmes de référence des coordonnées et projections
Workflows courants
Charger, transformer, analyser, exporter
# 1. Charger les données
gdf = gpd.read_file("data.shp")
# 2. Vérifier et transformer le CRS
print(gdf.crs)
gdf = gdf.to_crs("EPSG:3857")
# 3. Effectuer l'analyse
gdf['area'] = gdf.geometry.area
buffered = gdf.copy()
buffered['geometry'] = gdf.geometry.buffer(100)
# 4. Exporter les résultats
gdf.to_file("results.gpkg", layer='original')
buffered.to_file("results.gpkg", layer='buffered')
Jointure spatiale et agrégation
# Joindre des points à des polygones
points_in_polygons = gpd.sjoin(points_gdf, polygons_gdf, predicate='within')
# Agréger par polygone
aggregated = points_in_polygons.groupby('index_right').agg({
'value': 'sum',
'count': 'size'
})
# Fusionner à nouveau avec les polygones
result = polygons_gdf.merge(aggregated, left_index=True, right_index=True)
Intégration de données multi-sources
# Lire depuis différentes sources
roads = gpd.read_file("roads.shp")
buildings = gpd.read_file("buildings.geojson")
parcels = gpd.read_postgis("SELECT * FROM parcels", con=engine, geom_col='geom')
# Assurer un CRS correspondant
buildings = buildings.to_crs(roads.crs)
parcels = parcels.to_crs(roads.crs)
# Effectuer des opérations spatiales
buildings_near_roads = buildings[buildings.geometry.distance(roads.union_all()) < 50]
Conseils de performance
- Utiliser l'indexation spatiale : GeoPandas crée automatiquement des index spatiaux pour la plupart des opérations
- Filtrer pendant la lecture : Utiliser les paramètres
bbox,maskouwherepour charger uniquement les données nécessaires - Utiliser Arrow pour les I/O : Ajouter
use_arrow=Truepour une lecture/écriture 2-4x plus rapide - Simplifier les géométries : Utiliser
.simplify()pour réduire la complexité quand la précision n'est pas critique - Opérations par lot : Les opérations vectorisées sont beaucoup plus rapides que d'itérer les lignes
- Utiliser un CRS approprié : CRS projeté pour la surface/distance, géographique pour la visualisation
Bonnes pratiques
- Toujours vérifier le CRS avant les opérations spatiales
- Utiliser un CRS projeté pour les calculs de surface et de distance
- Faire correspondre le CRS avant les jointures spatiales ou les superpositions
- Valider les géométries avec
.is_validavant les opérations - Utiliser
.copy()lors de la modification des colonnes de géométrie pour éviter les effets de bord - Préserver la topologie lors de la simplification pour l'analyse
- Utiliser le format GeoPackage pour les workflows modernes (meilleur que Shapefile)
- Définir max_distance dans sjoin_nearest pour de meilleures performances