Skip to content

Instantly share code, notes, and snippets.

@bizouarn
Last active April 8, 2025 05:59
Show Gist options
  • Save bizouarn/57ba9f6f0626441870c7d5d6a5773d93 to your computer and use it in GitHub Desktop.
Save bizouarn/57ba9f6f0626441870c7d5d6a5773d93 to your computer and use it in GitHub Desktop.
Synthèse sur le langage de requête Overpass QL

Synthèse sur le langage de requête Overpass QL

Introduction

Le langage Overpass QL est utilisé pour effectuer des requêtes sur la base de données OpenStreetMap. Ce langage permet de récupérer des objets géographiques en utilisant des critères spécifiques. Il est particulièrement utile pour extraire des données détaillées depuis les serveurs Overpass. (https://overpass-turbo.eu/)

Structure d'une requête

Une requête Overpass QL se structure de la manière suivante :

[out:json][timeout:25];
{{geocodeArea:"Nom de l'entité"}}->.SA;
(
  // Critères de recherche
);
out body;

Explication des éléments :

  • [out:json] : Détermine le format de sortie des données (JSON, XML, etc.).
  • [timeout:25] : Définit le temps maximum d'exécution de la requête en secondes.
  • {{geocodeArea:"Nom de l'entité"}}->.SA : Récupère les données dans l'emprise géographique d'une entité spécifique (par exemple une commune).
  • (...) : Contient les critères de recherche pour filtrer les objets.
  • out body; : Indique la sortie des objets en corps de la réponse (les données complètes).

Opérateurs et filtres

Les requêtes Overpass QL sont basées sur des opérateurs de filtres qui permettent de sélectionner les objets en fonction de leurs clés et valeurs. Voici les opérateurs les plus utilisés :

Prédicat de sélection

Les prédicats définissent la clé et la valeur des objets que l'on veut récupérer.

node["key"="value"];
way["key"="value"];
relation["key"="value"];

Logique "ET"

La logique "ET" permet de récupérer des objets qui doivent correspondre à tous les critères spécifiés dans la requête.

Exemple :

node["highway"="cycleway"]["bicycle"="designated"];

Cela va récupérer les nœuds ayant la clé "highway" avec la valeur "cycleway" et la clé "bicycle" avec la valeur "designated" en même temps.

Logique "OU"

La logique "OU" permet de récupérer des objets correspondant à l'un ou l'autre des critères spécifiés. On utilise des parenthèses pour lier les différentes conditions.

Exemple :

(
  node["highway"="cycleway"](area.SA);
  node["highway"="path"](area.SA);
);
out body;

Cela récupère les nœuds correspondant soit à un "cycleway", soit à un "path". Les deux critères sont séparés par un point-virgule à l'intérieur des parenthèses, ce qui permet de récupérer l'un ou l'autre.

Explication des opérateurs de correspondance :

  • [“key”=“value”] : Recherche les objets ayant exactement cette clé et valeur.
  • [“key”~“value”] : Recherche les objets dont la clé contient la valeur spécifiée.
  • [“key”~“^value”] : Recherche les objets dont la clé commence par la valeur spécifiée.
  • [“key”~“value$”] : Recherche les objets dont la clé se termine par la valeur spécifiée.

Paramètres de la requête

Timeout

Le paramètre [timeout:25] définit le temps maximal d'exécution de la requête en secondes. Si la requête dépasse ce temps, elle sera annulée par le serveur.

Format de sortie

Le paramètre [out:] définit le format de sortie. Voici quelques options disponibles :

  • [out:xml] : Sortie en format XML.
  • [out:json] : Sortie en format JSON.
  • [out:csv] : Sortie en format CSV.
  • [out:custom] : Sortie en format personnalisé.
  • [out:popup] : Sortie pour les fenêtres popup.

Limite de taille

Le paramètre [maxsize:1073741824] permet de définir la taille maximale de la requête (en bytes) pour éviter une surcharge mémoire.

Options des objets

Ces options permettent de récupérer des informations spécifiques sur les objets retournés par la requête :

  • meta : Récupère les métadonnées des objets (versions, timestamp, etc.).
  • geom : Récupère la géométrie complète des objets (coordonnées, chemins, etc.).
  • skel : Récupère uniquement les informations nécessaires à la géométrie des objets (coordonnées des nœuds, chemins, etc.).

Emprise géographique

L'emprise géographique détermine la zone sur laquelle la requête est effectuée. Il existe plusieurs façons de définir cette emprise :

  • {{bbox}} : Boîte englobante de la carte affichée.
  • {{geocodeArea:"Nom"}} : Utilisation d'une zone géographique définie par son nom (ex : une commune).
  • (south,west,north,east) : Définition manuelle des coordonnées géographiques de la zone.

Exemple :

{{geocodeArea:"Paris"}}->.SA;
node["highway"="cycleway"](area.SA);
out body;

Conclusion

Le langage de requête Overpass QL est un outil puissant pour interroger la base de données OpenStreetMap. Avec la possibilité de définir des critères très précis et de récupérer des données dans différents formats, il offre une grande flexibilité pour exploiter les données géographiques. Grâce à la logique "ET" et "OU", il est possible de faire des requêtes complexes pour obtenir exactement les informations nécessaires.

A vos clavier !

[out:json][timeout:25];
// gather results
(
  relation["admin_level"="4"]["type"="boundary"]["source:population"~"INSEE"]({{bbox}});
);
// print results
out geom;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment