-
Notifications
You must be signed in to change notification settings - Fork 82
Description
Nous avons identifié un cas où le réseau de tronçons contient des extrémités séparées par moins d'un mètre, qui est la valeur par défaut de PATH_SNAPPING_DISTANCE.
Ce cas a été détecté suite à une erreur durant le routage. En effet, couplé à la tolérance de pgRouting également fixée à PATH_SNAPPING_DISTANCE, cela a pour conséquence que le routage considère ces deux extrémités comme étant le même noeud sur le graphe :
Geotrek-admin/geotrek/core/path_router.py
Line 31 in db8e256
| cursor.execute(query, [settings.PATH_SNAPPING_DISTANCE]) |
Sur l'image ci-dessus, on a les extrémités sud de P2 et P5 qui sont séparées d'environ 0,5m.
Il semblerait qu'il y avait originellement 3 anciens tronçons (A1, A2 et A3 ci-dessous) et qu'un nouveau (N) ait été rajouté par la suite :
Il ne faudrait pas pouvoir arriver à une situation où des extrémités de tronçons sont plus proches que la PATH_SNAPPING_DISTANCE.
Quand au problème de routage, c'est un sujet à traiter à part.
Cependant, dans le cas exposé ci-dessus, à l'ajout du tronçon N, quel comportement voulons-nous adopter ?
- Fusionner des tronçons pour que P1, P3, P4, P6 et P7 se touchent tous en un seul et même point, et supprimer P2 et P5 -> cela va entraîner des approximations dans les géométries, et il y a beaucoup de cas différents à gérer.
- Lors de l'ajout de N, détecter que les tronçons A2 et A3 vont être divisés en tronçons ayant des extrémités à moins de
PATH_SNAPPING_DISTANCE, et empêcher la création du tronçon. Cette solution nous semble la plus réaliste.
De plus, l'ajout de tronçons trop près les uns des autres est possible via le shell django (et probablement directement en base de données également).
Y a-t-il des cas d'usage pour lesquels cette interdiction poserait problème ?