Jour 4 – Éviter les doublons
Supposons que nous cherchons les hôtels et les restaurants. Nous avons vu qu'une requête peut retourner plusieurs lots de données :
nwr[amenity=restaurant]({{bbox}}); out geom; nwr[tourism=hotel]({{bbox}}); out geom;
Le problème de cette requête est qu'elle peut retourner des doublons : les hôtels-restaurants, qui portent à la fois le tag amenity=restaurant
et tourism=hotel
. Ainsi l'hôtel-restaurant “Les Flots Bleus” à Palavas-les-Flots, est en double dans le résultat de la requête : regardez dans l'onglet Données (en haut à droite de la carte).
Pour éviter cela, la solution consiste à assembler en un seul lot de données, les hôtels et les restaurants, en effectuant une union avec la syntaxe suivante :
( requete1; requete2; );
Placer plusieurs requêtes entre parenthèses a pour effet de créer l'union des lots de données résultant de chaque requête : les doublons sont éliminés. Voici ce que cela donne pour notre exemple :
( nwr[amenity=restaurant]({{bbox}}); nwr[tourism=hotel]({{bbox}}); ); out geom;
Notez que l'on peut inclure dans l'union un nombre quelconque de requêtes : ajoutons les fast-foods. Une astuce au passage : pour éviter de répéter la syntaxe ({{bbox}})
pour chaque requête, il est possible de le préciser une seule fois au tout début de la requête, avec la syntaxe suivante : [bbox:{{bbox}}];
.
On obtient donc :
[bbox:{{bbox}}]; ( nwr[amenity=restaurant]; nwr[tourism=hotel]; nwr[amenity=fast_food]; ); out geom; {{style: node, way, relation { text: name; } }}
Tiens ! Des étiquettes apparaissent sur la carte ! C'est le résultat du bloc {{style: }}
ci-dessus, qui indique d'afficher la valeur du tag name en étiquette (text:) pour tous les nodes, ways et relations. Il s'agit d'une syntaxe MapCSS comprise par Overpass Turbo – nous y reviendrons.
Exercices
- Trouvez les magasins de vêtements et de chaussures.
- Trouvez les galeries d'art, pratiquant la vente ou pas.
- Rédigez une requête qui retourne les distributeurs de billets et les banques équipées d'un ATM.
© CC-by-sa Carto’Cité