OpenStreetMap
Produits utilisés : OpenStreetMap
Cet ensemble de données est externe à la plateforme Digital Earth Africa.
Aperçu
OpenStreetMap <https://www.openstreetmap.org/> est une base de données géographique gratuite et ouverte, fournissant des informations sur la localisation des routes, des bâtiments et des points de repère. Elle est construite, maintenue et soutenue par une communauté géospatiale mondiale.
Les données OpenStreetMap sont sous licence Open Data Commons Open Database License (ODbL) par la Fondation OpenStreetMap (OSMF). Il est libre de copier, distribuer, transmettre et adapter les données, en mentionnant OpenStreetMap et ses contributeurs. Les informations complètes sur la licence et les directives d’attribution sont disponibles sur la page OpenStreetMap’s Copyright and License page.
Description
Ce bloc-notes montrera comment accéder aux données OpenStreetMap à l’aide du package Python `osmnx
<https://osmnx.readthedocs.io/en/stable/osmnx.html>`__.
Commencer
Pour exécuter cette analyse, exécutez toutes les cellules du bloc-notes, en commençant par la cellule « Charger les packages ».
Charger des paquets
Importez les packages Python utilisés pour l’analyse.
[1]:
import osmnx as ox
import geopandas as gpd
Par défaut, « osmnx » met en cache la réponse à la requête afin de ne pas avoir à appeler l’API à plusieurs reprises pour la même requête. L’accès au cache est efficace pour affiner une analyse ou lorsque le principal domaine d’intérêt d’un utilisateur est fixe. Les utilisateurs doivent cependant être conscients que les fichiers mis en cache occuperont de l’espace de stockage.
Il est possible de configurer l’utilisation du cache et l’emplacement de stockage des données mises en cache. Dans cet exemple, nous allons configurer le cache pour qu’il soit stocké dans un dossier temporaire qui est vidé lorsqu’un utilisateur se déconnecte du Sandbox. Cela peut ne pas être nécessaire pour certains utilisateurs.
[2]:
ox.settings.cache_folder='/tmp/cache/'
Paramètres d’analyse
Cette section définit les paramètres d’analyse, notamment :
central_lat, central_lon, buffer
: latitude/longitude centrales et taille de la fenêtre d’analyse pour la zone d’intérêt
L’emplacement par défaut est à Johannesburg, en Afrique du Sud.
L’API OpenStreetMap propose plusieurs méthodes différentes pour définir un emplacement. Bien que les méthodes utilisant une adresse ou un nom de lieu soient pratiques à utiliser, elles dépendent du géocodage et sont plus susceptibles de produire des correspondances d’emplacement ambiguës. Si le nom de lieu est utilisé, la fonction osmnx.geocode_to_gdf()
peut être utilisée pour vérifier si un nom de lieu donne la limite de lieu correcte. Pour une analyse combinée avec les ensembles de données DEAfrica, il est préférable d’utiliser une requête utilisant un cadre de délimitation ou un polygone.
Lorsque vous utilisez un cadre de délimitation pour effectuer une requête, notez que l’ordre des limites est « nord, sud, est, ouest ».
[3]:
# Set the central latitude and longitude.
central_lat = -26.2041
central_lon = 28.0473
# Set the buffer to load around the central coordinates.
buffer = 0.05
# Compute the bounding box for the study area.
xmin, xmax = central_lon - buffer, central_lon + buffer
ymin, ymax = central_lat - buffer, central_lat + buffer
bbox = (xmin, ymin, xmax, ymax)
Récupérer les géométries des bâtiments à partir d’OpenStreetMap
Différents types de géométries peuvent être interrogés en définissant le paramètre « tags ». Par exemple, « tags={“building”: True} » renverrait toutes les empreintes de bâtiments dans la zone.
À l’aide de l’emplacement et des balises, les géométries seront récupérées à partir d’OpenStreetMap et les résultats seront renvoyés sous forme de GeoDataFrame Geopandas.
[4]:
# tags for buildings
tags = {'building': True}
[5]:
geometries = ox.features.features_from_bbox(bbox=bbox, tags=tags)
[6]:
#print the first few rows
geometries.head()
[6]:
geometry | building | name | addr:city | addr:housenumber | addr:postcode | addr:street | building:levels | phone | website | ... | service_times | noexit | capacity | end_year | house | bench | bin | lit | type | operator:short | ||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
element | id | |||||||||||||||||||||
node | 618018755 | POINT (28.00625 -26.21595) | public | Langlaagte Testing Grounds | NaN | NaN | NaN | NaN | NaN | NaN | NaN | ... | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
739768208 | POINT (28.04897 -26.17096) | public | Astotech Conference Centre | NaN | NaN | NaN | NaN | NaN | NaN | NaN | ... | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | |
3656191305 | POINT (28.00091 -26.18852) | residential | Society of Jesus (Jesuits) | Auckland Park | 15 | 2092 | Molesey Avenue | 1 | +27 11 482 4237 | https://sj.org.za/ | ... | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | |
relation | 952160 | POLYGON ((28.05994 -26.19668, 28.06013 -26.196... | stadium | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | ... | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | multipolygon | NaN |
2609571 | POLYGON ((28.05811 -26.18412, 28.05811 -26.184... | yes | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | ... | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | multipolygon | NaN |
5 rows × 146 columns
[7]:
#visualize the geometries retrieved
geometries.plot(figsize=(10,12), cmap='tab20', column='building', legend=True, legend_kwds={'bbox_to_anchor':(1.25,1)});

Récupérer les géométries routières à partir d’OpenStreetMap
Les réseaux routiers peuvent être récupérés à l’aide de la balise « highway ». Une liste de valeurs de balise peut être utilisée pour sélectionner des types spécifiques de géométries.
Les valeurs de balise pour « highway » et leurs descriptions peuvent être trouvées sur https://wiki.openstreetmap.org/wiki/OpenStreetMap_Carto/Lines
[8]:
# selected types of roads
tags = {'highway': ['motorway', 'motorway_link', 'primary', 'primary_link',
'secondary', 'secondary_link', 'tertiary', 'tertiary_link',
'residential', 'pedestrian']}
[9]:
#noting the order of the bounds provided
geometries = ox.features.features_from_bbox(bbox=bbox, tags=tags)
[10]:
#print the first few rows
geometries.head()
[10]:
geometry | highway | ref | junction:ref | crossing | name | direction | destination:ref:to | bicycle | name:en | ... | minspeed | maxspeed:forward | cycleway:left | bridge:ref | area | cycleway:right | bus:lanes:backward | covered | handrail | placement | ||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
element | id | |||||||||||||||||||||
way | 4334924 | LINESTRING (28.05643 -26.20387, 28.05627 -26.2... | primary | R24 | NaN | NaN | Commissioner Street | NaN | NaN | NaN | NaN | ... | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
4339731 | LINESTRING (28.01733 -26.21239, 28.01707 -26.2... | primary | R41 | NaN | NaN | Main Reef Road | NaN | NaN | NaN | NaN | ... | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | |
4339842 | LINESTRING (28.08513 -26.19127, 28.08585 -26.1... | primary | R24 | NaN | NaN | Kitchener Avenue | NaN | NaN | NaN | NaN | ... | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | |
4339844 | LINESTRING (28.05802 -26.20314, 28.05774 -26.2... | primary | R24 | NaN | NaN | Albertina Sisulu Road | NaN | NaN | NaN | NaN | ... | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | |
4339876 | LINESTRING (28.01748 -26.2122, 28.01759 -26.21... | primary | R41 | NaN | NaN | Main Reef Road | NaN | NaN | NaN | NaN | ... | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
5 rows × 71 columns
[11]:
#visualize the geometries retrieved
geometries.plot(figsize=(10,12), cmap='tab10', column='highway', categorical=True, categories=tags['highway'], legend=True);

Informations Complémentaires
Licence : Le code de ce carnet est sous licence Apache, version 2.0 <https://www.apache.org/licenses/LICENSE-2.0>. Les données de Digital Earth Africa sont sous licence Creative Commons par attribution 4.0 <https://creativecommons.org/licenses/by/4.0/>.
Ce notebook accède aux données OpenStreetMap, par conséquent, lors du partage des résultats d’analyse, l’attribution doit suivre les directives de la page « Copyright et licence d’OpenStreetMap » <https://www.openstreetmap.org/copyright>.
Contact : Si vous avez besoin d’aide, veuillez poster une question sur le canal Slack Open Data Cube <http://slack.opendatacube.org/>`__ ou sur le GIS Stack Exchange en utilisant la balise open-data-cube
(vous pouvez consulter les questions posées précédemment ici). Si vous souhaitez signaler un problème avec ce bloc-notes, vous pouvez en déposer un sur Github.
Version de Datacube compatible :
[12]:
import datacube
print(datacube.__version__)
1.8.20
Dernier test :
[13]:
from datetime import datetime
datetime.today().strftime('%Y-%m-%d')
[13]:
'2025-01-13'