OSM et sources en ligne
Cartograpy embarque plusieurs clients orientés téléchargement de données, tous dans cartograpy.data. Chacun nécessite une connexion réseau au premier appel : voir Sources de données et dépendances pour le détail par source.
OpenStreetMap (OSM)
from cartograpy.data import OSM
osm = OSM()
# Par nom de lieu
ecoles = osm.get_data("Abidjan, Côte d'Ivoire", tags={"amenity": "school"})
# Par bounding box
routes = osm.get_data((-4.1, 5.2, -3.9, 5.4), tags={"highway": True}, data_type="lines")
# Par emprise d'un GeoDataFrame existant
poi = osm.get_data(commune_gdf, tags={"shop": True}, data_type="points")data_type(str, défautall) :"points","polygons","lines"ou"all": filtre le résultat par type de géométrie après récupération.
Hydrographie (Hydro)
from cartograpy.data import Hydro
hydro = Hydro()
rivieres = hydro.download(region="af") # codes : af, as, au, eu, na, sa
print(hydro.describe_variables()) # explication des colonnes HydroRIVERSTélécharge et extrait les données HydroRIVERS pour une région continentale, met en cache localement le zip extrait pour ne pas re-télécharger à chaque appel.
Altitude : modèle numérique de terrain (DEM)
from cartograpy.data import DEM
dem = DEM()
mnt = dem.download(bbox=(-8.6, 4.3, -2.5, 10.7)) # (west, south, east, north)Télécharge les tuiles SRTM (~30m) couvrant l’emprise depuis un miroir AWS, les mosaïque et les découpe à l’emprise demandée : pas de clé API nécessaire. Lève DEMDownloadError en cas d’échec de téléchargement ou de traitement.
Indicateurs World Bank (WorldBank)
from cartograpy.data import WorldBank
wb = WorldBank()
wb.get_sources() # sources de données disponibles
wb.get_indicators(source=2, query="population") # indicateurs correspondants
wb.get_countries(query="Africa") # pays disponibles
wb.get_data(["SP.POP.TOTL"], country=["CIV", "SEN"]) # DataFrame résultatMétéo & climat NASA POWER (Climate)
from cartograpy.data import Climate
clim = Climate() # API NASA POWER, sans clé, réponses mises en cache
# Série journalière en un point
gdf_pt = clim.get_point(
-3.99, 5.35, "2023-01-01", "2023-12-31", # lon, lat, début, fin
parameters=["T2M", "T2M_MIN", "T2M_MAX", "PRECTOTCORR"],
community="ag", temporal="daily",
) # GeoDataFrame indexé par date (géométrie constante)
# Grille de points sur une emprise, en mensuel
gdf = clim.get_region(
(-6, 4, -2, 8), 2020, 2022, # bbox [xmin,ymin,xmax,ymax], années
parameters=["T2M", "PRECTOTCORR"], temporal="monthly",
) # GeoDataFrame long : parameter, date, value, geometryparameters=None utilise Climate.DEFAULT_PARAMETERS. temporal ∈ "daily", "hourly", "monthly", "climatology" ; community ∈ "ag", "sb", "re". Codes de paramètres : https://power.larc.nasa.gov/parameters/.
Google Earth Engine (Gee)
from cartograpy.data import Gee
gee = Gee() # nécessite ee + geemap installés, et une authentification GEE préalable
col = gee.get_sentinel2(bbox=(-8.6, 4.3, -2.5, 10.7), start_date="2024-01-01", end_date="2024-03-01")
ndvi = gee.compute_ndvi(gee.collection(col).median())
gee.zonal_stats(ndvi, regions_gdf)Gee nécessite l’extra gee (pip install cartograpy[gee], qui installe earthengine-api et geemap) et une authentification (ee.Authenticate() puis ee.Initialize()) avant d’utiliser cette classe. Voir Sources de données et dépendances.
Catalogues STAC (STAC)
from cartograpy.data import STAC
stac = STAC("planetary-computer") # signe automatiquement les hrefs des assets
images = stac.search(
collection="sentinel-2-l2a",
bbox=(-4.05, 5.28, -3.95, 5.38),
start="2025-01-01", end="2025-12-31",
cloud_cover=10,
)
best = images.best() # élément avec la couverture nuageuse la plus faible
best.assets() # bandes disponibles (DataFrame)
rt = best.load(["red", "nir"]) # -> RasterTools, bandes empilées
ndvi = rt.ndvi() # réutilise RasterTools.ndvi() directementload() lit les bandes directement depuis leur href via rasterio : jamais de téléchargement complet de la scène, même pour une image Sentinel-2 de plusieurs centaines de Mo. bands accepte des clés d’asset exactes ("B04") ou des noms communs de l’extension STAC eo ("red", "nir").
STAC nécessite l’extra stac (pip install cartograpy[stac], qui installe pystac-client et planetary-computer) : ImportError explicite dès l’instanciation s’ils sont absents.
Géocodage (Geocoder)
from cartograpy.data import Geocoder
geocoder = Geocoder()
gdf, non_trouves = geocoder.geocode("Tour Eiffel, Paris")
gdf, non_trouves = geocoder.geocode(["Abidjan", "Dakar", "Bamako"])
adresses, _ = geocoder.reverse_geocode((48.8566, 2.3522))
candidats = geocoder.search("Boulangerie", limit=5, country_codes="fr")
bbox = geocoder.bbox("Abidjan, Côte d'Ivoire")Renvoie un GeoDataFrame (colonnes query, address, latitude, longitude, geometry…) et la liste de ce qui n’a pas été trouvé, plutôt que de lever une erreur : pratique pour géocoder un lot d’adresses en continuant malgré les échecs individuels.
Un délai (delay=1.0 par défaut) est appliqué entre chaque requête pour respecter les limites d’usage de Nominatim. Augmentez delay si vous géocodez de gros volumes.
Aller plus loin
- Frontières et données administratives :
GeoBoundaries/Bound, une source spécialisée dans les limites administratives - Reference data : signatures complètes de toutes ces classes