Mode d'emploi d'API Overpass

Toutes les données dans une région
Trouver des objets
Compter d'objets
Analyser des données
Plus d'informations

Formats de données

Il y a plusieurs formats de données pour récupérer des objets d'OpenStreetMap. Nous présenterons tous les formats qui ont une application immédiate.

Démarcation

Les types de données ont déjà été présentés dans la section appropriée de l'introduction. Vous devriez donc déjà être familier avec les nœuds, les chemins et les relations.

Cette section explique les formats de sortie. D'autre part, les différents degrés de détail possibles sont présentés. L'outil qui a besoin de quel format de sortie est expliqué dans la section sur l'outil.

Le problème commun de compléter la géométrie des objets OpenStreetMap, est dédié à la section sur les géométries dans le chapitre Toutes les données dans une région.

Niveaux de verbosité traditionnels

D'abord au niveau de détail: Alors que les formats de sortie sont contrôlés par un paramètre global pour chaque requête, les niveaux de détail de chaque instruction de sortie sont contrôlés par ses paramètres. Il est ainsi possible de mélanger différents niveaux de détail dans une même requête; cette capacité est nécessaire pour une quantité optimale de données de certaines variantes géométriques. C'est ce qui est noté pour chaque application.

Nous donnons également un exemple autour de Greenwich, la banlieue de Londres. L'exemple est principalement choisi de telle sorte qu'il fournit seulement une quantité maitrisable des nœuds, chemins et relations, pour bien voir les données de l'onglet Données d'Overpass Turbo.

Pour les niveaux de détail originaux d'OpenStreetMap, il existe une hiérarchie pour les activer:

L'instruction out ids revient:

( way(51.477,-0.001,51.478,0.001)[name="Blackheath Avenue"];
  node(w);
  relation(51.477,-0.001,51.478,0.001); );
out ids;

L'instruction out skel fournit en outre les informations nécessaires, pour construire la géométrie:

( way(51.477,-0.001,51.478,0.001)[name="Blackheath Avenue"];
  node(w);
  relation(51.477,-0.001,51.478,0.001); );
out skel;

L'instruction out (sans ajouts) retourne les géodonnées complètes, c'est à dire supplémentaires:

( way(51.477,-0.001,51.478,0.001)[name="Blackheath Avenue"];
  node(w);
  relation(51.477,-0.001,51.478,0.001); );
out;

L'instruction out meta retourne en plus:

( way(51.477,-0.001,51.478,0.001)[name="Blackheath Avenue"];
  node(w);
  relation(51.477,-0.001,51.478,0.001); );
out meta;

Enfin, l'instruction out attribution retourne les données suivantes:

Toutefois, ce dernier niveau de détail concerne les données qui, selon l'opinion dominante, relèvent de la protection des données. Un effort accru est donc nécessaire. Étant donné que ces données ne sont requises pour aucune des applications discutées dans ce chapitre, nous allons nous passer d'un exemple ici.

Variantes

Il est possible d'ajouter trois degrés de détail à la géométrie supplémentaire. Toutes les combinaisons entre les degrés de détail qui viennent d'être présentés et les degrés de détail géométrique supplémentaires sont possibles.

Le drapeau center active une coordonnée unique pour chaque objet. Ceci n'a pas de signification mathématique particulière, mais se trouve simplement au milieu du rectangle englobant d'objet: Exemple 1

( way(51.477,-0.001,51.478,0.001)[name="Blackheath Avenue"];
  node(w);
  relation(51.477,-0.001,51.478,0.001); );
out ids center;

Exemple 2

( way(51.477,-0.001,51.478,0.001)[name="Blackheath Avenue"];
  node(w);
  relation(51.477,-0.001,51.478,0.001); );
out center;

Le drapeau bb (pour Bounding-Box, rectangle englobant en anglais) active le rectangle englobant pour chaque objet: Exemple

( way(51.477,-0.001,51.478,0.001)[name="Blackheath Avenue"];
  node(w);
  relation(51.477,-0.001,51.478,0.001); );
out ids bb;

Le drapeau geom (pour géométrie) complète les coordonnées complètes. Le niveau minimum de détail requis pour cela est skel, donc cela fonctionne jusqu'à et y compris l'attribution: Exemple

( way(51.477,-0.001,51.478,0.001)[name="Blackheath Avenue"];
  node(w);
  relation(51.477,-0.001,51.478,0.001); );
out skel geom;

Mais maintenant nous avons plus de quelques centaines de mètres dans un parc de Greenwich: aussi plusieurs centaines de kilomètres de sentiers pédestres dans l'est de l'Angleterre. Il s'agit d'un problème général de relations. Comme remède, il y a aussi un rectangle englobant pour la commande de sortie, voir là.

Enfin, il y a le format de sortie tags. Ceci est basé sur ids et affiche en plus des attributs, mais pas de géométries ou de structures. C'est particulièrement utile si vous n'avez pas besoin des coordonnées dans le résultat:

( way(51.477,-0.001,51.478,0.001)[name="Blackheath Avenue"];
  node(w);
  relation(51.477,-0.001,51.478,0.001); );
out tags;

Cependant, il peut également être combiné avec les deux niveaux de géométrie center et bb:

( way(51.477,-0.001,51.478,0.001)[name="Blackheath Avenue"];
  node(w);
  relation(51.477,-0.001,51.478,0.001); );
out tags center;

JSON et GeoJSON

Passons maintenant aux formats de données: Même que le niveau de détail peut être sélectionné pour chaque commande de sortie, le format de sortie n'est spécifié qu'une seule fois globalement pour chaque requête. De plus, le choix du format de sortie change la forme, mais pas le contenu.

Au sein de JSON, l'enjeu est de combler un fossé. D'une part, il existe un format commun pour les géodonnées, appelé GeoJSON. D'autre part, les données OpenStreetMap doivent conserver leur structure, et ça ne correspond pas aux spécifications de GeoJSON.

Comme solution, il y a la possibilité de créez des objets compatibles GeoJSON à partir des objets OpenStreetMap. Cependant, les objets OpenStreetMap originaux sont mappés fidèles à l'original dans JSON et ne sont pas GeoJSON.

OpenStreetMap objets dans JSON:

[out:json];
( way(51.477,-0.001,51.478,0.001)[name="Blackheath Avenue"];
  node(w);
  relation(51.477,-0.001,51.478,0.001); );
out geom;

Éléments dérivés dans JSON:

[out:json];
( way(51.477,-0.001,51.478,0.001)[name="Blackheath Avenue"];
  node(w);
  relation(51.477,-0.001,51.478,0.001); );
convert item ::=::,::geom=geom(),_osm_type=type();
out geom;

La création d'éléments dérivés est un grand complexe de sujets avec son propre chapitre.

CSV

Il est souvent utile de pouvoir organiser les données sous forme de tableaux. Pour les données OpenStreetMap, cela signifie des colonnes sélectionnées par l'utilisateur. et une ligne pour chaque objet trouvé.

La sélection des colonnes limite les informations disponibles sur l'objet pour la plupart des objets. Par exemple, les attributs qui ne sont pas demandées comme colonnes ne sont pas éditées. Des géométries plus complexes qu'une simple coordonnée ne peuvent pas non plus être affichées dans ce format. C'est ce qui distingue ce format des formats XML et JSON potentiellement sans perte.

Le cas standard d'une colonne est la clé d'un attribut. La valeur de cet attribut est ensuite sortie vers l'objet pour chaque objet. Si l'objet n'a pas cet attribut, une valeur vide est sortie. Il existe des valeurs spéciales pour les autres propriétés de l'objet; ceux-ci commencent par ::. exemple

[out:csv(::type,::id,name)];
( way(51.477,-0.001,51.478,0.001)[name="Blackheath Avenue"];
  node(w);
  relation(51.477,-0.001,51.478,0.001); );
out center;

CSV lui-même signifiait à l'origine comma separated value (anglais: valeur séparée par des virgules). Cependant, les nombreux programmes qui l'utilisent ont développé des attentes différentes à l'égard des séparateurs. Ainsi, le séparateur peut être configuré et le titre peut être activé et désactivé:

[out:csv(::type,::id,name;false;"|")];
( way(51.477,-0.001,51.478,0.001)[name="Blackheath Avenue"];
  node(w);
  relation(51.477,-0.001,51.478,0.001); );
out center;

Les applications respectives indiquent quelle variante convient le mieux.


prochaine: Overpass Turbo