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)});
../../../_images/sandbox_notebooks_Datasets_OpenStreetMap_14_0.png

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);
../../../_images/sandbox_notebooks_Datasets_OpenStreetMap_19_0.png

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'