Outils pour utilisateurs

Outils du site


openstreetmap:overpass:api_la_recursion

Overpass API – La récursion

La récursion permet de naviguer dans le modèle de données OpenStreetMap, en exécutant une forme de jointure entre les tables. On distingue la récursion descendante, qui permet par exemple d'obtenir les nodes référencés par un way, et la récursion ascendante qui permet à l'inverse d'obtenir les ways référençant un node.

Un exemple simple

La requête suivante produit les nodes référencés par les ways portant la clef highway :

way[highway]({{bbox}});
>;
out;

Seuls les nodes référencés par les ways sont inclus dans le résultat. L'exécution de la requête se déroule ainsi :

  1. way[highway]({{bbox}}); produit l'ensemble résultat contenant des ways
  2. >; prend pour lot d'entrée ces ways et produit le lot résultat contenant tous les nodes qu'ils référencent
  3. out; produit (exporte, affiche) le lot résultat

Pour exporter également les ways résultant de l'étape 1, une solution simple consiste à les exporter avant d'en dériver les nodes :

way[highway]({{bbox}});
out;
>;
out;

La récursion globale

Les instructions de récursion globale combinent en réalité plusieurs jointures entre tables de données OSM. Elle facilitent la navigation dans le modèle de données, par exemple pour extraire tous les éléments référencés dans un lot de données.

Type de récursion Syntaxe Description
Descendante simple > tous les nodes et ways référencés en ignorant les relations référencées
Descendante multiple >> tous les nodes, ways et relations référencées
Ascendante simple < ways et relations référençant un node ou un way du lot d'entrée
Ascendante multiple << tous les ways et relations référençant un élément du lot d'entrée

La récursion sélective

Les instructions de récursion sélective, ou unitaire, permettent d'effectuer une jointure entre deux tables, par exemple pour récupérer les seuls nodes référencés par une relation.

Type de récursion Sens Syntaxe Description
way → node Descendant node(w) les nodes référencés par les ways du lot en entrée
node → way Ascendant way(bn) les ways référençant les nodes du lot en entrée
rel → node Descendant node(r) les nodes référencés par les relations du lot en entrée
node → rel Ascendant rel(bn) les relations référençant les nodes du lot en entrée
rel → way Descendant way(r) les ways référencés par les relations du lot en entrée
way → rel Ascendant rel(bw) les relations référençant les ways du lot en entrée
rel → rel Descendant rel(r) les relations filles, référencées par les relations du lot en entrée
rel → rel Ascendant rel(br) les relations mères, référençant les relations du lot en entrée

Ces instructions sont particulièrement utiles pour naviguer au sein des données de transport en commun. Voici quelques exemples basés sur les transports en commun de Nantes (réseau TAN).

Nombre de variantes d'une ligne de tramway :

rel[type=route_master][ref=1][network=TAN];
rel(r);
out count;

Les arrêts de la ligne C2 :

rel[type=route][network=TAN][ref=C2];
node(r);
out;

En utilisant une variable :

rel[type=route][network=TAN][ref=C2]->.c2;
node(r.c2);
out;

Les lignes de transport passant par l'arrêt “Commerce” :

node[highway=bus_stop][network=TAN][name="Commerce"];
rel(bn);
out tags;

Récursion avec filtre sur le rôle

La récursion des membres d'une relation permet de prendre en compte leur rôle. Exemple pour ne retenir que les stop position d'une ligne de bus :

rel[type=route][network=TAN][ref=C2];
node(r:platform);
out;

En utilisant une variable, par exemple pour inclure nodes et ways :

rel[type=route][network=TAN][ref=C2]->.c2;
(
  node(r.c2:platform);
  way(r.c2:platform);
);
out geom;

Schéma récapitulatif

Le diagramme suivant synthétise les différents types de récursion de l'API Overpass.

  • Printable version
  • Export to OpenOffice
  • Export to PDF
  • Add page to book
  • Tools:
openstreetmap/overpass/api_la_recursion.txt · Dernière modification: 2020/01/10 09:56 par admin