<div dir="ltr">il serait intéressant de compléter cet exemple avec quelque chose de significatif, notamment car il y a souvent plusieurs rôles ("outer", "inner", ainsi que le rôle vide souvent mis à la place de "outer" quand il n'y a aucune enclave)<div><br></div><div>On peut faire l'union des rôles.</div><div>Attention aussi à la requête de récursion avec "<span style="font-size:12.8px">(._;>;);" qui récupère absolument tous les éléments fils dans une union avec l'élément parent (ici dans le jeu de données "_" par défaut).</span></div><div><span style="font-size:12.8px"><br></span></div><div>Ensuite attention à l'instruction "out;" qui possède plusieurs options pour déterminer le niveau de détails demandés (sans les tags avec "skel", ou avec les tag avec l'option par défault "body", ou avec en plus des métadonnées avec l'option "meta", telles que le dernier changeset, sa date et l'utilisateur).</div><div><br></div><div>Sur une des instances Overpass on a aussi des données historiques ("Attic") mais c'est souvent très lent (et actuellement cette instance a des problèmes de surcharge serveur).</div><div><br></div><div>Ci-dessous j'annote les noms de resultsets temporaires avec des noms explicites, plutôt que d'utiliser et écraser le resultset "_" par défaut entre chacune des 3 requêtes principales :</div><div><br></div><div> // Première requête : la relation cherchée (cela ne sort pas la liste des membres)</div><div> // Ce resultset temporaire ne sera pas inclus dans le résultat final</div><div><span style="font-size:12.8px"> rel(</span><a href="http://www.openstreetmap.org/relation/5430194" target="_blank" style="font-size:12.8px">5430194</a><span style="font-size:12.8px">)->TMP1;</span></div><div><br></div><div> // Deuxième requête: récursion sur certains membres en fonction des rôles à garder, le tout dans une (union)</div><div> // Ce resultset temporaire contenant des ways ne sera pas inclus dans le résultat final</div><div><span style="font-size:12.8px"> ( way(r.</span><span style="font-size:12.8px">TMP1</span><span style="font-size:12.8px">:"outer");</span></div><div><span style="font-size:12.8px"> way(r.</span><span style="font-size:12.8px">TMP1</span><span style="font-size:12.8px">:"inner");</span></div><div><span style="font-size:12.8px"> way(r</span><span style="font-size:12.8px">.</span><span style="font-size:12.8px">TMP1</span><span style="font-size:12.8px">:"");</span></div><div><span style="font-size:12.8px"> )-></span><span style="font-size:12.8px">TMP2</span><span style="font-size:12.8px">;</span></div><div><br></div><div> // Troisième requête : on garde dans le resultset final une union tous les ways et la récursion sur tous leurs noeuds membres</div><div><span style="font-size:12.8px"> ( .</span><span style="font-size:12.8px">TMP2</span><span style="font-size:12.8px">;</span></div><div><span style="font-size:12.8px"> .</span><span style="font-size:12.8px">TMP2</span><span style="font-size:12.8px">>;</span></div><div><span style="font-size:12.8px"> )-></span><span style="font-size:12.8px">TMP3</span><span style="font-size:12.8px">;</span></div><div><br></div><div> // Résultats de la troisième requête.</div><div><span style="font-size:12.8px"> .</span><span style="font-size:12.8px">TMP3 </span><span style="font-size:12.8px">out skel;</span><br></div><div><span style="font-size:12.8px"><br></span></div><div><span style="font-size:12.8px">Le résultat ici cependant reste un ensemble de "ways" (la deuxième récursion avec l'opérateur ">" ne les connecte pas automatiquement. l'interface graphique Overpass Turbo cependant fait cette connexion côté client (pas côté serveur) pour créer des lignes "lines" continue ou des aires fermées ("area"), elle analyse les chemins pour aussi déterminer ceux qui sont internes ou externes pour remplir les surfaces, avec la liste des noeuds.</span></div><div><span style="font-size:12.8px"><br></span></div><div><span style="font-size:12.8px">Overpass API permet pas mal de souplesse dans la façon de faire des requêtes et sous-requêtes. Nommer les resultsets d'entrée (indiqués après un ".") ou de sortie (après un "->") n'a aucun impact en performance, mais cela permet des requêtes plus complexes ou plus fines selon les besoins.</span></div><div><span style="font-size:12.8px"><br></span></div><div><span style="font-size:12.8px">Mais Overpass API ne sait pas encore transformer </span><span style="font-size:12.8px">sur le serveur</span><span style="font-size:12.8px"> </span><span style="font-size:12.8px">les objets d'un resultset (par exemple créer des buffers, des simplifications de géométrie, joindre les lignes, déterminer les surfaces fermées dans un objet parent), c'est à faire côté client (Overpass Turbo le fait via le javascript qu'il envoie au client, c'est ce javascript également qui fait un rendu vectoriel MapCSS dans une couche superposée sur le fond de carte; ce client fait également les calculs de projection pour correspondre à l'échelle de visualisation et n'afficher et positionner que les objets qui sont dans le rectangle visible, car Overpass API ne retourne que des coordonnées WGS84 telles qu'elles sont sur le serveur de données OSM, indépendamment de la vue courante ou du niveau de zoom).</span></div><div><span style="font-size:12.8px"><br></span></div><div><span style="font-size:12.8px">Overpass sait visiblement de lui-même purger les resultsets nommés dès qu'ils ne sont plus utiles à d'autres requêtes ou à une instruction "out" qui suit.</span></div></div><div class="gmail_extra"><br><div class="gmail_quote">Le 22 août 2016 à 16:45, Christian Quest <span dir="ltr"><<a href="mailto:cquest@openstreetmap.fr" target="_blank">cquest@openstreetmap.fr</a>></span> a écrit :<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div bgcolor="#FFFFFF" text="#000000">
<p>Dans overpass une requête permet de ne sélectionner que les
membres portant un certain rôle dans la relation:</p>
<p>rel(<a href="http://www.openstreetmap.org/relation/5430194" target="_blank">5430194</a>);<br>
way(r:"line");<br>
(._;>;);out skel;<br>
</p>
<p>Après il faut en récupérer la version geojson...<br>
</p><div><div class="h5">
<br>
<div>Le 22/08/2016 à 15:25, François Lacombe
a écrit :<br>
</div>
<blockquote type="cite">
<div dir="ltr">
<div>
<div>
<div>
<div>Bonjour Philippe, Guillaume,<br>
<br>
</div>
Personne n'est a coté de la plaque ;)<br>
<br>
</div>
Cependant, seule la méthode m’intéresse.<br>
</div>
En effet il y a déjà quelques outils qui parviennent à
présenter graphiquement une relation mais j'ai besoin de
l'implémenter de mon côté.<br>
<br>
</div>
Relativement à l'exemple du résultat d'OSM.org. Il n'emploie pas
une géométrie unique. Il affiche tous les objets de la relation
et c'est vite le fouillis, en plus de devoir être découpé pour
être intégré dans du geojson.<br>
<div>
<div>
<div>
<div>
<div>Voir ici : <a href="http://www.openstreetmap.org/relation/5430194" target="_blank">http://www.openstreetmap.org/<wbr>relation/5430194</a><br>
</div>
<div>Je m'attends à récupérer une ligne toute simple
sans les deux polygones aux extrémités. C'est la seule
géométrie "simple" et représentative qu'on puisse
exploiter sans faire appel à des FeatureCollections ou
autre.<br>
</div>
<div>
<div>
<div class="gmail_extra"><br>
</div>
<div class="gmail_extra">Et ça me semble très dur de
trouver une méthode générique qui puisse faire
cette synthèse parce qu'il semble qu'il y ait
autant de possibilités que de cas :'(<br>
</div>
<div class="gmail_extra"><br>
</div>
<div class="gmail_extra">François<br>
<br>
</div>
<div class="gmail_extra">
<div class="gmail_quote">Le 22 août 2016 à 14:45,
Philippe Verdy <span dir="ltr"><<a href="mailto:verdy_p@wanadoo.fr" target="_blank">verdy_p@wanadoo.fr</a>></span>
a écrit :<br>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
<div dir="ltr">Le site web OSM le fait déjà
quand on "explore" une relation: ça
télécharge un jeu de données JSON permettant
le rendu vectoriel de l'objet sélectionné
par dessus le fond de carte. La Wikipédie
francophone le fait aussi sur ses cartes
(mais elle requête son propre serveur pour
obtenir aussi des POIs géolocalisés sur
Wikipédia ou des photos géolocalisées sur
Commons)
<div>Attention en cas d'inclusion dans un
script web : l'API ne doit pas surcharger
le serveur interrogé (on a vu le problème
ces jours-ci sur Overpass API avec des
centaines de milliers de requêtes par
heure au lieu de quelques dizaines
habituellement, deux serveurs Overpass API
sont tombés plusieurs fois de suite,
peut-être à cause d'un script d'un réseau
publicitaire abusif ou d'une appli
non-officielle type Pokemon).</div>
<div>Bref gérer des caches sur votre serveur
et éviter de faire des requêtes
automatiques en boucle par le client sur
chaque page web du site ou chaque page de
l'appli mobile, respecter les protocoles !<br>
<div><br>
</div>
</div>
</div>
<div class="gmail_extra"><br>
<div class="gmail_quote">
<div>
<div>Le 22 août 2016 à 14:30,
François Lacombe <span dir="ltr"><<a href="mailto:fl.infosreseaux@gmail.com" target="_blank">fl.infosreseaux@gmail.com</a>></span>
a écrit :<br>
</div>
</div>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
<div>
<div>
<div dir="ltr">
<div>
<div>
<div>
<div>
<div>
<div>Bonjour à tous,<br>
<br>
</div>
Avec la récente mise en
place et adoption
croissante d'open event
database, je me pose une
question que certains
ont déjà du résoudre.<br>
<br>
</div>
Existe-t-il une méthode
générique pour convertir
une relation OSM en
geojson ?<br>
</div>
Cela reviendrait à convertir
la relation en géométrie
simple (points / polyline).<br>
<br>
</div>
Le besoin est d'attribuer une
géométrie représentative à des
événements dégagés par des
ouvrages décrit avec une
relation.<br>
</div>
Après on peut les envoyer sur
open event db.<br>
<br>
</div>
Mais il peut y avoir des tonnes
d'autres usages à cela, sans se
limiter à cet exemple.<br>
<div>
<div>
<div>
<div>
<div>
<div><br>
</div>
<div>J'aimerais éviter
les scripts avec des
if/else à rallonge
pour cibler tel ou tel
type de relation, à la
recherche de tel ou
tel objet qui au final
n'est pas forcé de se
trouver là où on
l'attend, etc...<br>
</div>
<div><br>
<br>
</div>
<div>Merci par avance
pour vos retours<br>
<br>
</div>
<div>François<br>
</div>
<div>
<div><br>
<br>
--<br clear="all">
<div>
<div>
<div data-smartmail="gmail_signature">
<div dir="ltr"><b>François
Lacombe</b><br>
<br>
fl dot
infosreseaux
At gmail dot
com<br>
<a href="http://www.infos-reseaux.com" target="_blank">www.infos-reseaux.com</a><br>
<a href="http://www.twitter.com/InfosReseaux" target="_blank">@InfosReseaux</a></div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<br>
</div>
</div>
<span>______________________________<wbr>_________________<br>
Talk-fr mailing list<br>
<a href="mailto:Talk-fr@openstreetmap.org" target="_blank">Talk-fr@openstreetmap.org</a><br>
<a href="https://lists.openstreetmap.org/listinfo/talk-fr" rel="noreferrer" target="_blank">https://lists.openstreetmap.or<wbr>g/listinfo/talk-fr</a><br>
<br>
</span></blockquote>
</div>
<br>
</div>
<br>
______________________________<wbr>_________________<br>
Talk-fr mailing list<br>
<a href="mailto:Talk-fr@openstreetmap.org" target="_blank">Talk-fr@openstreetmap.org</a><br>
<a href="https://lists.openstreetmap.org/listinfo/talk-fr" rel="noreferrer" target="_blank">https://lists.openstreetmap.or<wbr>g/listinfo/talk-fr</a><br>
<br>
</blockquote>
</div>
<br>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<br>
<fieldset></fieldset>
<br>
<pre>______________________________<wbr>_________________
Talk-fr mailing list
<a href="mailto:Talk-fr@openstreetmap.org" target="_blank">Talk-fr@openstreetmap.org</a>
<a href="https://lists.openstreetmap.org/listinfo/talk-fr" target="_blank">https://lists.openstreetmap.<wbr>org/listinfo/talk-fr</a>
</pre>
</blockquote>
<br>
<br>
</div></div><span class="HOEnZb"><font color="#888888"><pre cols="72">--
Christian Quest - OpenStreetMap France</pre>
</font></span></div>
<br>______________________________<wbr>_________________<br>
Talk-fr mailing list<br>
<a href="mailto:Talk-fr@openstreetmap.org">Talk-fr@openstreetmap.org</a><br>
<a href="https://lists.openstreetmap.org/listinfo/talk-fr" rel="noreferrer" target="_blank">https://lists.openstreetmap.<wbr>org/listinfo/talk-fr</a><br>
<br></blockquote></div><br></div>