Table des matières
Jour 7 – Filtres géographiques
Nous nous sommes jusqu'ici intéressés aux filtres sur les tags, en nous contentant d'un simple ({{bbox}})
pour le filtre géographique.
Tout d'abord précisons que la forme ({{bbox}})
ne fait pas partie de la syntaxe Overpass API. Il s'agit d'un raccourci Overpass Turbo, qui se charge de convertir les limites définies par la carte dans la syntaxe (lat_min, lon_min, lat_max, lon_max)
, comprise par l'API Overpass. Cela vaut aussi pour la forme [bbox:{{bbox}}]
placée en entête de requête :
[bbox:46.892,-2.322,47.037,-2.144]; nwr[amenity=restaurant]; out geom;
Recherche dans une surface
Effectuer une recherche à l'intérieur du périmètre d'une collectivité peut fonctionner avec une requête très simple. Exemple avec les restaurants de Rezé :
area[name="Rezé"]; nwr[amenity=restaurant](area); out geom;
Cette requête mérite quelques explications.
L'instruction area
La première ligne trouve les surfaces dont le nom est “Rezé”. Des surfaces ? Oui, un serveur Overpass stocke, en complément des nodes, ways et relations, des surfaces dans un format adapté à l'exécution de tests comme « ce point est-il à l'intérieur ? ». Ces surfaces sont créées à partir des données OSM, pour toutes les relations de type multipolygon, et un grand nombre de ways fermés comme le décrit la page https://wiki.osm.org/wiki/Overpass_turbo/Polygon_Features. L'instruction area permet d'accéder à ces surfaces, en y appliquant les filtres habituels.
Lot de données courant
Comme pour les instructions node, way, rel et nwr, la première ligne produit un lot de données. Celui-ci peut l'être avec l'instruction out), mais constitue le « lot de données courant ». Celui-ci est utilisé par la seconde instruction, qui recherche les restaurants se trouvant dans les surfaces faisant partie de ce lot de données.
Attention ! Si ce lot de données contient plusieurs surfaces, la seconde instruction s'applique alors à chacune d'elles. L'instruction area[name=“Rezé”];
retourne toutes les surfaces avec name=Rezé, il se trouve qu'il n'en existe qu'une dans toute la base OSM. Mais si vous remplacez Rezé par Saint-Denis, vous obtenez des restaurants à Saint-Denis en Seine Saint-Denis, mais aussi à l'Île de la Réunion, dans le Val d'Aoste et un village de l'Aude.
Chercher dans la bonne surface
Vous pouvez examiner le résultat de la première instruction exécutant la requête :
area[name="Saint-Denis"]; out;
Aucune surface ne s'affiche sur la carte (nous y reviendrons), mais le résultat est visible dans l'onglet Données. On y trouve non seulement les limites des communes nommées Saint-Denis, mais également des arrondissements, une gare, un parc, et trois églises !
Pour restreindre la requête à Saint-Denis en Seine Saint-Denis, il convient d'appliquer les bons filtres sur les tags à la première instruction. En examinant les tags des différentes surfaces, on identifie la clef “ref:INSEE” comme le filtre le plus sélectif. Le filtre sur le nom devient même inutile : on obtient la requête suivante.
area["ref:INSEE"="93066"]; // Saint-Denis du 93 nwr[amenity=restaurant](area); out;
Cette façon de limiter le résultat de la recherche dans une surface pose quelques questions. Nous y revenons demain :o)
© CC-by-sa Carto’Cité