Rendu des itinéraires de randonnées
publié le , mis à jourCartes utilises les tags de la relation route (osmc:symbol, ref, name).
Hors les itinéraires de randonnées sont composés de plusieurs niveaux de relations. Il faudrait afficher les tags des relations de plus hauts niveaux.
Exemple : Relation 2865587 Doische - Hossus
Plutôt que d'afficher "sans nom" car l'itinéraire n'a ni tag name, ni tag ref Cartes pourrait afficher en fonction du zoom les libellés suivants :
- GR 654 (tag
refde la relation de plus haut niveau) - GR 654 — Voie de Vézelay (tag
refetnamede la relation de plus haut niveau) - GR 654 — Voie de Vézelay : Doische - Hossus (Idem plus tags
fromettode la relation de plus bas niveau) - GR 654 : Doische - Hossus (Version plus courte)
À défaut, afficher au moins ceci :
- Doische - Hossus (en utilisant les tags
frometto)
Concernant le rendu du symbole et du trait, Cartes devrait utiliser dans ce cas le tag osmc:symbol de la relation de plus haut niveau (la relation de plus bas niveau n'en a pas).
Ceci est un exemple simplifié car cet itinéraire n'a que 2 niveaux de relations. Il en existe à 3 voir plus.
Des relations correspondant souvent à des étapes peuvent être communes à 2 voir plusieurs itinéraires. C'est le cas ici (cf. #2099).
Ici le rendu utilise le tag osmc:symbol mais il existe bien plus de modélisations dans OSM selon l'activité, la région, le pays… cf. doc de Waymarked Trails)
Quand il n'y a pas de tag osmc:symbol ou de tags "localisés" comme kct_* ou jel, on peut tout simplement utiliser le tag colour et construire un symbole en l'associant avec le tag ref comme le fait iD
etienneJr
Je relance ce ticket car il pourrait intéresser @GanKonMalade
Sur l'exemple proposé par @pyrog https://cartes.app/?sports=oui-hiking&allez=Route+mineure%7Cw97887397%7C4.74712%7C50.12492
Lors du clic sur un way OSM, ce cadre est affiché qui contient toutes les relations contenant ce way. J'ai un doute si ce sont uniquement les relations parent direct, ou aussi les "grand-parents", à vérifier dans la requête
L'affichage de ce cadre est géré par le composant OutdoorRoutes.tsx, qui s'occupe aussi de réaliser la requête overpass. Il est appelé par OsmFeature.tsx L729 en passant les infos du way OSM.
En revanche, quand on clique sur un de ces itinéraires, il n'y a pas d'infos affichées sur la fiche-lieu, on a juste le surlignage de l'itinéraire sur la carte. https://cartes.app/?sports=oui-hiking&allez=GRP+124+Liaison+5+-+Hasti%C3%A8re%7Cr15582848%7C4.71676%7C50.14307
Une première étape serait d'étendre le cadre OutdoorRoutes aux éléments de type "relation itinéraire de plein air" (et pas uniquement aux ways), en recupérant la liste des relations enfants ou parents. Un point important sera de gérer l'affichant des relations de façon hiérarchique.
Une deuxième étape sera d'étendre ce principe d'affichage hiérarchique lors du clic sur un way, pour que le cadre propose les différents niveaux, et qu'on comprenne que "étape X" fait partie du "GR Y".
(l'affichage des numéros sur le fond de carte est un problème complètement indépendant, ne pas le traiter ici)
Kaolity
Bonjour,
Je suis GanKonMalade, je regarde le problème. Je vais essayer dans un premier temps de me concentrer sur la récupération de tous les niveaux de relations pour les itinéraires plein-air.
Ça risque de me prendre du temps, c'est ma première expérience de développement sur cartes et je n'ai encore jamais build l'app.
Une question que je me pose déjà est, lorsqu'on arrivera a récupérer tous les parents d'une relation de type route, voudra-t-on encore afficher la relation de plus bas niveau ou est-ce qu'on préfèrera se limiter aux relations de plus haut niveau et leur rendu?
On verra ca plus tard, deja j'ai beaucoup a apprendre! merci.
esmenard
@Kaolity wrote in https://codeberg.org/cartes/web/issues/2100#issuecomment-26953634:
Une question que je me pose déjà est, lorsqu'on arrivera a récupérer tous les parents d'une relation de type route, voudra-t-on encore afficher la relation de plus bas niveau ou est-ce qu'on préfèrera se limiter aux relations de plus haut niveau et leur rendu?
Je propose de faire la même chose que Waymarked Trails : afficher la relation de plus haut niveau avec
network=lwn, celle de plus haut niveau avecnetwork=rwn, etc.pyrog
Lors du clic sur un way OSM, ce cadre est affiché qui contient toutes les relations contenant ce way. J'ai un doute si ce sont uniquement les relations parent direct, ou aussi les "grand-parents", à vérifier dans la requête
La requêtes sur https://serveur2.cartes.app/api/interpreter est en clair :
[out:json]; way(id:97887397); <; out tags center qt;La requête overpass renvoit uniquement les parents directs :
- GRP 124 Liaison 5 - Hastière (15582848)
- Balade des Bornes Frontières (20349895)
- Doische Promenade n°2 (20349897)
- GRT-BVW 30 Vierves-sur-Viroin - Soulme (19418524)
- SAT Sentier des Abbayes Trappistes de Wallonie (13950957)
- GRP 125 Tour de l'Entre-Sambre-et-Meuse (2927577)
- 2865587
La relation 2865587 est une étape commune de ces itinéraires :
PS : cet exemple n'est pas le plus propre car la référence est recopiée dans le nom 😢 Je pensais le traiter à la génération des tuiles vectorielles si techniquement c'est possible.
Kaolity
Avec Overpass, la seule façon que je vois de recuperer tous les relations parentes, c'est d’itérer sur l'ensemble des relations de l’élément visualisé et d'effectuer cette query rel(idRelation); rel(br); jusqu'a ce qu'on ne trouve plus de relation.
Mais cela veut dire que ca multiplierait drastiquement les query au serveur overpass pour chaque clic sur un chemin ou une relation de type route. Est-ce que c'est un solution pertinente @etienneJr ?
pyrog
ça ne me parait pas pertinent.
Je voulais tester la récupération des relations parentes lors de la génération des tuiles vectorielles mais je n'ai jamais réussi à installer les outils sur macOS (ça bloquait sur une des nombreuses dépendances).
etienneJr
@pyrog peux tu donner à @Kaolity un exemple de relations imbriquées sur 3 niveaux, et la requête overpass qui permet de toutes les récupérer à partir d'un way membre ? Pas besoin de gérer la hiérarchie dans la requête overpass, on la reconstruira côté JS.