Mode d'emploi d'API Overpass

Compter d'objets
Analyser des données
Plus d'informations

Par Tag

Requêter pour tous les objets qui possèdent un attribut particulier.

Globalement

Nous voulons trouver tous les objets dans le monde entier, où un attribut donné est présent.

Ceci n'est utile que via l'API Overpass pour les attributs ayant moins de 10 000 occurrences; vous pouvez trouver le numéro correspondant sur Taginfo. Avec des nombres plus importants, cela peut prendre trop de temps, pour obtenir les données, ou le navigateur plante pendant l'affichage ou les deux.

Les requêtes avec restrictions spatiales fonctionnent également bien sur les attributs fréquents.

Un exemple typique pour les attributs rares sont les noms de choses, ici Cologne (Köln en Allemand):

nwr[name="Köln"];
out center;

Comme vous pouvez le voir, vous ne voyez rien après avoir cliqué sur Exécuter. Seule la loupe permet de voir les données. Nous utilisons une vue globale de la carte glissante pour toutes les requêtes suivantes, pour que tu n'aies pas à te recentrer.

Cependant, même dans des cas évidents, de telles recherches peuvent échouer. Il y a des résultats pour Francfort (Frankfurt en Allemand) à travers le monde, et l'objet pour la ville sur la Main n'est même pas là:

nwr[name="Frankfurt"];
out center;

La raison en est que l'ajout am Main est dans le nom. L'API Overpass négligerait sa tâche principale, si elle trouve quand même l'objet. Une recherche interprétative est la tâche d'un géocodeur, par exemple Nominatim.

Cependant, il y a des requêtes pour cela, par exemple par des expressions régulières. Nous pouvons rechercher tous les objets dont le nom commence par Frankfurt; à cause des nombreux résultats, la recherche prend beaucoup de temps, mais la taille de résultat reste inoffensive dans ce cas malgré le message d'avertissement:

nwr[name~"^Frankfurt"];
out center;

Beaucoup d'autres utilisations typiques des expressions régulières sont expliquées ci-dessous.

Ce sont maintenant beaucoup de résultats, surtout les rues dont le nom commence par Frankfurt. En règle générale, toutefois, vous recherchez un type d'objet spécifique. Dans le cas d'une limite de ville, c'est toujours une relation. Nous pouvons le rechercher spécifiquement, en écrivant relation au lieu de nwr (pour Nodes-Ways-Relations):

relation[name="Köln"];
out geom;

Ici, aussi le type de sortie passe de center à geom, pour que vous puissiez voir la géométrie complète de l'objet.

En conséquence, il y a aussi les types node et way au lieu de nwr. Ils ne renvoient que des nœuds ou que des voies.

Enfin, les attributs avec des caractères spéciaux (tout sauf les lettres, les chiffres et le trait de soulignement) dans la clé ou la valeur doivent être mentionnées. L'observateur attentif ne s'est pas échappé, que la valeur dans les requêtes est toujours entre guillemets en haut. Cela serait également nécessaire pour les clés; la requête ci-dessus est écrit entièrement formellement:

relation["name"="Köln"];
out geom;

Cependant, l'API Overpass ajoute les guillemets tacitement, quand il est clair qu'il s'agit d'une intention. Ceci ne peut pas fonctionner avec les caractères spéciaux, parce que les caractères spéciaux pourraient aussi avoir une autre signification et l'utilisateur peut s'être trompé ailleurs lors de la rédaction de la requête.

Les guillemets sont utilisés dans les valeurs, en antéposant un backslash.

Localement

Si vous voulez rechercher tous les objets avec un attribut dans une zone, il s'agit en fait d'une combinaison de plusieurs opérateurs; ceci est systématiquement décrit aux points Opérations ET et OU et Enchainer. Voici seulement quelques cas standard.

Tous les objets dans un lieu unique sont par exemple tous les cafés de Cologne:

area[name="Köln"];
nwr[amenity=cafe](area);
out center;

La fonction exacte de la première ligne est expliquée sous Surfaces. Nous sommes particulièrement intéressés par la deuxième ligne: Il s'agit d'une requête de type cible nwr (c'est-à-dire que nous recherchons des nœuds, des chemins (ways) et des relations); premièrement le filtre [amenity=cafe] est mis, c'est-à-dire que nous n'autorisons que les objets pour lesquels l'attribut avec la clé amenity existe et est définie sur la valeur cafe. Deuxièmement, le filtre (area) limitant la zone est mis.

Le filtre (area) fonctionne par enchaînement.

De cette façon, nous recherchons les objets pour lesquels la condition d'attribut et la condition spatiale s'appliquent. Celles-ci sont, encore une fois d'affilée, prêt à être édité dans la ligne suivante.

Si c'est trop compliqué pour vous, mais il y a aussi un moyen plus simple: Vous pouvez utiliser un rectangle englobant pour limiter l'espace et le combiner avec le filtre pour un attribut (exemple):

nwr[amenity=cafe]({{bbox}});
out center;

L'élément central ici est aussi la ligne commençant par nwr: Le filtre [amenity=cafe] fonctionne comme dans l'exemple précédent; Le filtre ({{bbox}}) est remplit par Overpass Turbo pour nous avec le rectangle englobant de délimitation actuellement visible, et l'API Overpass applique ensuite cette rectangle englobant comme deuxième filtre.

Comme pour tous les filtres, l'ordre des deux filtres n'a pas d'importance:

nwr({{bbox}})[amenity=cafe];
out center;

a le même résultat que la requête précédente.

Encore une fois, le type d'instruction de requête entre node (le nœud), way (le chemin) et la relation peut et doit être choisi de manière appropriée, par exemple, seulement les chemins pour les chemins de fér:

way[railway=rail]({{bbox}});
out geom;

Particulièrement

Dans le cas de Francfort, nous avons déjà rencontré le problème, que nous voulons chercher une valeur sans être précis. Un outil très puissant sont les expressions régulières. Une introduction systématique aux expressions régulières dépasse le cadre de ce manuel, mais il y a au moins quelques exemples de cas courants.

Dans de nombreux cas, nous connaissons le début d'un nom. Par exemple, nous cherchons ici les rues dont le nom commence par Emmy:

way[name~"^Emmy"];
out geom;

Le caractère le plus important dans toute la requête est le tilde ~. Il s'affiche sur la première ligne du filtre, que les valeurs doivent être évaluées par une expression régulière. Maintenant, toutes les valeurs existantes pour la clé name dans la base de données sont comparées avec l'expression régulière après le tilde.

Le deuxième caractère le plus important est l'accent circonflexe dans l'expression ^Emmy; ceci fait partie de l'expression régulière et assurez-vous que seules les valeurs qui commencent avec Emmy correspondent. Tout compte fait, c'est écrit:

Trouver tous les objets de type way (chemin), qui ont un attribut avec une clé name et une valeur, en commençant par Emmy.

La deuxième ligne contient alors une instruction de sortie correspondante.

Vous pouvez également rechercher des valeurs, se terminant à une certaine valeur, par exemple Noether:

way[name~"Noether$"];
out geom;

Le tilde ~ affiche à nouveau le filtre après une expression régulière. Le signe du dollar $ défini dans l'expression régulière, que la valeur devrait se terminer par Noether.

La loupe comme fonction confort de l'Overpass Turbo permet de zoomer sur le seul résultat à Paris.

Il est également possible de rechercher une sous-chaîne, quelque part au milieu:

way[name~"Noether"];
out geom;

Il suffit d'écrire la chaîne de caractères sans caractères supplémentaires.

Ça devient un peu plus difficile, si vous voulez trouver deux (ou plusieurs) chaînes de caractères, p. ex. nom et prénom, mais on ne sais pas ce qu'il y a entre les deux. Dans Emmy Noether, le trait d'union et l'espace sont tous deux présents. Vous pouvez mettre entre crochets tous les caractères possibles (deux ou plus):

way[name~"Emmy[ -]Noether"];
out geom;

Vous pouvez également autoriser tous les caractères en même temps:

way[name~"Emmy.Noether"];
out geom;

Le charactère décisif ici est le point .. Il représente un seul caractère arbitraire.

Parfois, c'est nécessaire, pour autoriser un nombre quelconque de caractères intermédiaires. Vous recherchez donc deux chaînes de caractères distinctes. Le compositeur Bach en est un exemple; il a encore plus de prénoms d'après Johann:

way[name~"Johann.*Bach"];
out geom;

Ici, les deux caractères spéciaux point . et étoile * travaillent ensemble. Le point correspond à n'importe quel caractère, et l'étoile signifie, que le caractère précédent peut être répété aussi souvent que souhaité (pas du tout, une ou plusieurs fois).

Le point d'interrogation vient s'y ajouter: Le caractère précedent peut apparaître zéro ou une seule fois. Cela nous aide avec Gerhard ou Gerard ou Gerardo Mercator:

way[name~"Gerh?ardo?.Mercator"];
out geom;

Enfin, il convient de mentionner le cas, qui revient à ET et OU: Trouvez une valeur dans une liste telle que les valeurs par défaut trunk, primary, secondary, tertiary pour les routes principales!

way[highway~"^(trunk|primary|secondary|tertiary)$"]({{bbox}});
out geom;

Nous sommes intéressés par le filtre [highway~"^(trunk|primary|secondary|tertiary)$"]; le tilde ~ montre l'expression régulière. Dans l'expression régulière, l'accent circonflexe au début et le signe du dollar à la fin signifient, que la valeur totale, et pas seulement une sous-chaîne, doit correspondre à la valeur intermédiaire. La ligne verticale | signifie OU, et les pinces font en sorte que ça arrive, que l'accent circonflexe et de dollar n'affectent pas qu'une seule valeur.

Par nombre

...


prochaine: Enchainer