Outil qui permet d’émettre des requêtes à l’API d’Open Street Map (OSM), et d’en visualiser les résultats sur une carte interactive.

Recherche simple

Une requête en Overpass Qwery Language est composé de ces différents éléments :

Type[TAG](Emprise)
sortie;

Emprise

Zone géographique dans laquelle la requête va être émise.

  • ({{bbox}}) : zone de la carte visible dans la partie droite de la fenêtre. (par défaut)
  • {{geocodeArea:name}} : pour les noms de lieux (ville, région, pays, …)

Exemple :

{{geocodeArea:poitiers}}->.searchArea;
way["highway"](area.searchArea);

Pour plus d’info : wiki

Type

Par défaut nwr pour interroger les trois.

TypedésignationExemples
nodenoeud, point géographique (long/lat)feu tricolore
wayvoie, interconnection d’au moins 2 noeuds (chemin ouvert, circuit, zones)route, bâtiment
relrelation, regroupement de plusieurs noeuds, voies ou relationsville, frontière

Tag

Ressources : TagInf, wiki d’OSM

À chaque type est associé un ou plusieurs tags, sous la forme : ["clé"="valeur"]
Ça permet de préciser la requête, par exemple : [oneway=yes]
Pour chercher un tag quelle que soit sa valeur : ["key"]
Et pour une correspondance partielle : ["key"~"regex"];

Ajout de critère

Plusieurs tags consécutif

ex : way["highway"]["maxspeed"="30"]({{bbox}});

Sortie

Se finit par un ;

Généralement seulement out; mais on peut préciser la nature de la sortie :

naturesortie
out body;objets avec leurs attributs complets
out skel;squelette, uniquement les identifiants
out geom;géométrie complète (positions des noeuds dans un way, etc)
out meta;avec métadonnées (version, timestamp, utilisateur)
out qt;optimisé en rapidité

Extraire plusieurs types d’objets

Il suffit de faire plusieurs requêtes avant la sortie et de les garder dans des ();

(
node["key1"="val1"](area.searchArea);
node["key2"="val2"](area.searchArea);
node["key3"="val3"](area.searchArea);
);

Avec la même clé en simplifiant

(
node[key~"(val1|val2|val3)"](area.searchArea);
);

exemple :

(
node["amenity"="bar"](area.searchArea);
node["amenity"="cafe"](area.searchArea);
node["amenity"="pub"](area.searchArea);
);

et

(
node[amenity~"(bar|cafe|pub)"](area.searchArea);
);

Recherche Composées

Nommer les recherches

On peut donner un nom à une requête afin de la lier à d’autres.

(requête).nom;

ex :
(node[amenity~"(bar|cafe|pub)"](area.searchArea);)-> .bcp;

Fonctions

Around

Recherche dans un rayon autour d’un objet nommé

node(around.objet:distance) [“lieu_voulu”];

ex :
node(around.bcp:50) ["amenity"="restaurant"];
les restaurants qui sont à moins de 50m d’un bcp

TIPS : amenity est une base de donnée plutôt sympa

Conditions

Filtres numériques

way["maxspeed"~"^[3-4][0-9]$"];    // vitesses entre 30 et 49
node["height"="10"];               // hauteur exacte

Négation

node["amenity"]["amenity"!="parking"];

Conditions internes if

Syntaxe
(type["clé"](if: condition)(zone););

Ex :
way["highway"](if: t["maxspeed"] == "50")({{bbox}});

Fonctions et opérateurs utilisables dans if

Fonction / OpérateurDescriptionExemple
is_number(x)teste si la valeur est numériqueis_number(t["maxspeed"])
is_tag(key)teste si le tag existeis_tag("surface")
t["key"]valeur d’un tagt["name"]
~regext["name"] ~ "École"
!~non correspondancet["highway"] !~ "residential"
\==, !=, <, >, <=, >=comparaisonst["maxspeed"] > 30
&&etis_number(t["maxspeed"]) && t["maxspeed"] > 90

Ressources utiles pour aller plus loin :

Pour une utilisation d’Overpass-Turbo dans des challenge : Canular savant 1, Une aiguille dans une ile-de-France