====== Jour 1 – La requête élémentaire ====== La requête élémentaire est constituée de **deux instructions** : La première instruction consiste à **sélectionner un lot de données** dans la base de données OSM (ou plutôt dans une copie). Voici sa syntaxe : * ''node'', ''way'' ou ''rel'' : le type d'élément recherché * entre ''[ ]'' : un ou plusieurs filtres sur les tags * entre ''( )'' : un ou plusieurs filtres de divers types Les filtres entre parenthèses sont souvent des filtres géographiques, comme ''%%{{bbox}}%%'' qui décrit la zone visible sur la carte sur Overpass Turbo. Nous en verrons d'autres. La seconde instruction consiste à **retourner ce lot de données** comme //résultat de la requête// Overpass. Il s'agit de l'instruction ''out'' dont nous verrons quelques variantes. Par exemple, la requête suivante retourne les arrêts de bus avec un abri. L'instruction de sélection combine deux filtres sur les //tags// et un filtre géographique : les 3 conditions doivent être remplies (//ET// logique). Seuls les //nodes// qui portent les //tags// ''highway=bus_stop'' **//ET//** ''shelter=yes'', **//ET//** se trouvent dans la zone visible de la carte, sont sélectionnés. node [highway=bus_stop] [shelter=yes] ({{bbox}}); out; Une instruction peut être écrite sur une ou plusieurs lignes, cela n'a pas d'importance. Par contre, toute instruction Overpass, se termine par un point-virgule : '';''. Il est même possible de placer plusieurs instructions sur la même ligne, ainsi la requête ci-dessus peut être écrite : node[highway=bus_stop][shelter=yes]({{bbox}}); out; Un filtre de tag peut ne contenir que la //clef// : sont conservés les éléments pour lequel ce //tag// **est défini**, //quelle que soit sa valeur// : node [highway=bus_stop] [shelter] ({{bbox}}); out; Si on ajoute un point d'exclamation avant la clef, seuls les éléments pour lesquels ce tag **n'est pas défini** sont retournés : node [highway=bus_stop] [!shelter] ({{bbox}}); out; Lorsque la //clef// ou la //valeur// du filtre contient une espace, un accent ou un caractère spécial, il est nécessaire de placer cette //clef// et/ou cette //valeur// **entre //quotes//**. Exemple avec un nom de lieu en breton : node [place=town] ["name:br"="Karaez-Plougêr"]; out; Les //quotes// simples et doubles sont possibles, je conseille toutefois les **//quotes// doubles** qui ne seront pas perturbées par la présence de //quotes// simples dans les noms. Notez que cette dernière requête contient deux filtres de tags mais **aucun filtre géographique**. Les filtres de tags sont en effet suffisamment restrictifs pour que le résultat soit de taille raisonnable. Mais ne faites pas ça pour obtenir tous les restaurants de la planète : les serveurs Overpass sont très utilisés et limitent la durée d'exécution d'une requête et le volume du résultat. ===== Exercices ===== * Modifier la requête pour trouver les arrêts de bus accessibles aux personnes à mobilité réduite (PMRs). * Modifier la requête pour trouver les arrêts de bus sans information sur leur accessibilité aux PMRs. * Écrire une requête qui retourne les parkings à vélo de type arceaux (documentation : https://wiki.openstreetmap.org/wiki/FR:Tag:amenity=bicycle_parking) © CC-by-sa Carto’Cité