-
Notifications
You must be signed in to change notification settings - Fork 77
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Modification non voulue des topologies #2515
Comments
Les itinéraires (ainsi que la plupart des autre objets relatifs aux tronçons comme les interventions, les statuts, les aménagaments, les sentiers...) sont gérés en segmentation dynamique : https://geotrek.readthedocs.io/en/master/user-manual.html#edition-d-un-objet. Cela a plusieurs avantages, dont le fait que quand on modifie de tronçons, l'ensemble des objets qui y sont liés restent automatiquement cohérents avec le tracé des tronçons sur lesquels ils s'appuient. Mais c'est en même temps complexe, car tous les objets sont dépendants des tronçons. Il y a 2 cas qui peuvent poser soucis :
De ce que je comprends, c'est le cas 2 que tu évoques ici. Il est assez logique et n'est pas vraiment un bug, même si ce comportement n'est pas souhaitable. A voir quelles évolutions pourraient être envisagées pour améliorer ce point ? |
C'est ça.
Ce n'est pas un bug d'implémentation. Mais ça peut être considéré comme un bug de conception.
Il ne l'est clairement pas. Personne ne s'attend à ce que le tracé soit modifié silencieusement quand on va éditer une donnée attributaire.
L'idée est que, au moment de l'édition, l'algorithme de routage rajoute automatiquement les points de passages nécessaires pour que le tracé soit conservé. Algo empirique : pour chaque portion entre points de départ/arrivée/passage, on compare l'ancienne route avec la nouvelle (plus court chemin en tenant compte des tronçons ajoutés entre temps). On part du début et on trouve le point d'intersection A à partir duquel les deux routes divergent. On fait la même chose pour le point B en partant de la fin. Ensuite, on place un point de passage obligatoire au milieu du tronçon du milieu entre A et B. Et on recommence au début tant que les deux routes ne sont pas identiques. |
Oui c'est en effet pas souhaitable. |
Une remarque @camillemonchicourt :
Oui et non. Nous avons remarqué que s'il y a deux tronçons proches (qui se rejoignent), il arrive que le phénomène se produise. Cela à l'air aléatoire... Une question @gutard :
Cela ne risque pas de dégrader les temps de réponses ? L'affichage est déjà long pour les grands itinéraires, cela serait embêtant de l'alourdir plus... |
Je ne pense pas. En tout cas ça dépendra de l'ampleur des changements du réseau sur le tracé. |
Bonjour, je me permet de confirmer que ce problème est bien conséquent sur notre Geotrek PNR des Grands Causses et de l' Aubrac, depuis que nous avons ajouté de nombreux tronçons de route pour le cyclo notamment, ou des pistes en parallèle de monotrace pour le Gravel par exemple. Nous avons eu plusieurs itinéraire impacté, j'ai du demandé aux nombreux contributeurs d'être très vigilant lors de modification! En attendant que l'on puisse financer cette amélioration imaginé par Gaël, j'ai conseillé aux utilisateurs de rajouter manuellement de nombreux point de passage obligatoire sur les nouveaux itinéraires, et sur les existant déjà publiés de télécharger le GPX du circuit avant de rentrer en modification, pour contrôler le tracé avant de sauvegarder!!! |
On a détecté un autre problème qui casse les topologies. Lors du découpage d'un tronçon, les agrégations sont dupliquées, mais les deux conservent leur numéro d'ordre en commun alors qu'il faudrait tout renuméroter. Du coup, il y a une chance sur deux pour que l'ordre ne soit pas respecter ce qui casse la topologie. Nous somme en train d'y travailler mais le sujet est assez complexe et il est bien moins confortable de travailler sur les triggers en PL/pgSQL que sur le code en Python. |
Ça, je comprends !!! |
Dans certains cas, quand les topologies des randos cassent, la rando devient un point. Pour identifier celles-ci : SELECT id, st_geometrytype(geom) FROM core_topology
WHERE kind='TREK' AND st_geometrytype(geom)='ST_Point'; |
Bonjour, Lors du déploiement de la https://viacolumbani.com/ nous avons aussi rencontré ce délicat problème. Sur certains itinéraires parents aux distances conséquentes, lors de l'ouverture de la fiche d'un itinéraire (dont le tracé a déjà été réalisé en amont), après chargement du tracé, celui-ci est modifié. Ces modifications d'itinéraires apparaissaient généralement toujours au même endroit, avec un ou plusieurs points de passage obligatoire (points jaunes) qui disparaissaient ou les points de départ/arrivée qui étaient modifiés de quelques centaines de mètres. Je viens de faire part de l'ouverture de ce ticket au responsable du projet. En fonction des solutions trouvées, nous verrons s'il nous est possible de participer à ce correctif. D'ici là, si je peux aider le groupe de travail, en réalisant des tests précis par exemple, je reste disponible. |
Bonjour, |
Quelques test ce matin ! |
Une analyse complémentaire du sujet est lancé.
|
Les 2 jours d'analyse complémentaire ont permis de préciser les soucis rencontrés, et identifier des pistes de correction : https://geotrek.ecrins-parcnational.fr/ressources/gt/12-topologies/2021-11-18-MakinaCorpus-PNC-Analyse.pdf |
Parmi les pistes pour limiter le soucis lié au fait que lorsque l'on modifie un itinéraire (ou autre objet topologique linéaire) et que des tronçons ont été ajoutés entre temps, créant un chemin plus court différent qui modifie le tracé de l'itinéraire quand on modifie et enregistre celui-ci, une améliorations proposée est "Lors d’une modification, afficher la géométrie originale pour que l’utilisateur soit averti d’un éventuel changement à la sauvegarde (prévention modification non souhaitée)". Cela serait utilise et intéressant, mais j'ai pensé à une amélioration complémentaire. Le soucis se produit surtout quand on veut juste modifier quelques infos attributaires d'un itinéraire et que cela modifie son tracé à l'insu de l'utilisateur car un chemin plus court a été trouvé au chargement du tracé de l'itinéraire. Ma proposition serait donc que quand on passe en modification d'un objet, on ne soit pas directement en modification de sa géométrie. En ouvrant le formulaire, la partie carte serait en mode consultation, on n'afficherait donc que l'objet à partir de son champs "geom". |
Je valide à 100% ta solution Camille, elle a l'avantage de correspondre à 95% des cas sur mon territoire où ce sont les OT qui veulent juste changer des infos attributaires et pas la géométrie de l'itinéraire. |
Si je ne m'abuse, cette solution a déjà été évoqué, et, toujours si je ne m'abuse, la topologie n'est pas modifiée si seule les données attributaires sont modifiées. A confirmer par un expert ;) |
Les points 3.1 (Add filter valid geometries on topologies) et 3.3.1 (Add setting ALLOW_PATH_DELETION_TOPOLOGY which protect or not against deletion of path with topologies linked to it) ont été intégrés dans la version 2.84.0 de Geotrek-admin.
|
Les problèmes sont lié à #1348 |
La solution finalement proposé pour resoudre les problèmes d'ordre des topologies est une nouvelle commande qui sera lancé régulièrement pour reordonner tous les PathAggregations pour éviter d'avoir des topologies dont la geometrie est un MultilineString. Elle utilise ft_smartMakeline qui est la fonction permettant de retrouver une lignestring à partir des PathAggregations. Elle peut trouver même lorsque l'ordre n'est pas bon. Il ne marche pas dans tous les cas, lorsque la géometrie est cassé (manque de pathaggregation | pathaggregation dont l'ordre ne permet pas de retrouver ...) Il restera à corriger :
|
La commande Je l'ai testée sur le serveur de DEMO. Avant de la lancer le filtre "Topologie valide" me renvoyait 22 randos non valides. Après lancement de la commande, il n'en renvoyait plus que 7 randos non valides. En effet les 7 randos qu'il n'a pas pu corriger sont celles qui ont aussi leur géométrie non valide. La commande a renvoyé :
Un élément qui me semble bizarre est que quand je relance la commande plusieurs fois de suites, il me ré-indique à chaque fois qu'il a update une topologie :
Sans avoir rien changé, il ne devrait pas en remettre une à jour à chaque fois. Je ne l'ai pas encore lancé en production, car je ne sais pas si cela peut avoir des effets de bord sur certains objets ? Les supprimer ? Les dépublier ? PS : Le message de la commande ("51 topologies has beeen updated") devrait être changé en "51 topologies have been updated". |
Il y a un log si tu mets -v 1 dans tes options à la commande
On a remarqué le problème. Je pense pas que ca pose problème, mais ca reste étrange. Ca doit arriver lorsque tu as 2 paths aggregations qui passent dans le meme ordre. Les 2 pathaggregations representent la meme chose. |
OK merci pour ces retours. |
Salut à tous, petit retour de mon côté, idem après avoir résolu mes erreurs topologiques, j'ai toujours 265 topologies qui sont updatées à chaque fois que je lance la commande. |
Bonjour, Suite à plusieurs tests de découpage de tronçons parcourus par des itinéraires, il apparaît que la topologie est mise à jour correctement seulement si :
Quelques exemples dans ce PDF : modifications-de-topologies-lors-du-decoupage-de-troncons.pdf |
Merci pour ces tests et retours qui donnent des indications précieuses sur les cas qui posent soucis en terme de découpage des tronçons. Concernant le sujet central et initial de ce ticket (modifications non voulues des topologies quand on modifie une topologie après avoir ajouté des tronçons qui créé des chemins plus courts) a été corrigé dans le cadre du gros travail de @justinefricou sur le déplacement du calcul du routing (chemin le plus court) côté serveur (backend). |
Bonjour,
Nous rencontrons des modifications non souhaités sur les topologies des itinéraires.
Nous avons en base un réseau de tronçons assez dense, et l'ors de modification des données attributaires, il arrive que la topologie de l'itinéraire soit modifiée sans que nous l'ayons demandé...
C'est particulièrement pénalisant sur les grands itinéraires.
The text was updated successfully, but these errors were encountered: