====== Jour 8 – Utiliser des variables ====== Cherchons maintenant les parcs se trouvant à Saint-Denis **et** à La Courneuve. Si nous appliquons la requête suivante, le Parc départemental Georges-Valbon, qui se trouve à cheval sur les 2 communes, est retourné 2 fois. area["ref:INSEE"="93066"]; // Saint-Denis nwr[leisure=park](area); out geom; area["ref:INSEE"="93027"]; // La Courneuve nwr[leisure=park](area); out geom; Pour éviter cela nous avons vu le jour 4 comment produire l'union de plusieurs lots de données. La requête suivante fonctionne, mais elle a un problème : savez-vous le trouver ? ( area["ref:INSEE"="93066"]; // Saint-Denis nwr[leisure=park](area); area["ref:INSEE"="93027"]; // La Courneuve nwr[leisure=park](area); ); out geom; Le problème est qu'elle inclut dans le résultat les deux surfaces Saint-Denis et La Courneuve, car les instructions area se trouvent à l'intérieur de l'union. Certes leur géométrie n'est pas retournée, car l'instruction area ne le permet pas, mais nous ne les souhaitons pas dans le résultat de la requête. Pour résoudre ce problème nous devons utiliser des **variables**. Une variable est un mot arbitraire qui permet de stocker un lot de données, afin de le réutiliser à tout endroit dans la suite de la requête. La solution consiste donc à placer chaque surface dans une variable, que nous utilisons pour trouver les parcs de chaque commune : area["ref:INSEE"="93066"]->.sd; // Saint-Denis area["ref:INSEE"="93027"]->.lc; // La Courneuve ( nwr[leisure=park](area.sd); // Parcs de Saint-Denis nwr[leisure=park](area.lc); // Parcs de La Courneuve ); out geom; Notez bien ces éléments de syntaxe : - Une variable est un mot arbitraire commençant par un point, ici ''.sd'' et ''.lc'' - Stocker un lot de données dans un variable s'écrit avec les signes ''%%->%%'' (qui dessinent une flèche) - ''(area.sd)'' est un filtre permettant de sélectionner les éléments à l'intérieur **des** surfaces contenues dans le lot de données ''.sd'' Il existe une autre façon d'écrire la même requête. Elle consiste à produire un lot de données contenant les deux surfaces qui nous intéressent, avec une **union**, pour ensuite chercher les parcs se trouvant dans l'une ou l'autre : ( area["ref:INSEE"="93066"]; // Saint-Denis area["ref:INSEE"="93027"]; // La Courneuve )->.villes; nwr[leisure=park](area.villes); out geom; On peut même alors se passer de la variable... ( area["ref:INSEE"="93066"]; // Saint-Denis area["ref:INSEE"="93027"]; // La Courneuve ); nwr[leisure=park](area); out geom; Vous savez quoi ? Ce tuto me fait réaliser que le filtre ''(area)'' sélectionne en réalité les éléments se trouvant **au moins en partie** à l'intérieur d'une surface, pas seulement ceux se trouvant **entièrement** dedans. En termes d'analyse spatiale, on obtient donc les éléments //intersectant// une surface. ===== Exercices ===== * Trouvez les chemins et pistes cyclables se trouvant dans le Parc départemental Georges-Valbon * Trouvez les hôtels et restaurants de Saint-Denis et La Courneuve © CC-by-sa Carto’Cité