Pages: 1
- Sujet précédent - pgRouting : obtenir des polylignes orientées dans le sens du trajet ? - Sujet suivant
#1 Thu 04 July 2019 13:32
- MaelReboux
- Participant actif
- Lieu: Roazhon / Rennnes
- Date d'inscription: 24 Aug 2010
- Messages: 72
pgRouting : obtenir des polylignes orientées dans le sens du trajet ?
Bonjour à tous,
J'ai actuellement sous PostGIS tout un traitement (assez classique) qui :
* utilise du filaire de voies OSM
* le passe en topologie pour avoir des nœuds partout
* le passe ensuite en topologie pgRouting pour pouvoir faire du calcul d'itinéraire
A ce stade tout va bien mais je m'aperçois seulement maintenant que les polylignes / tronçons qui constituent le trajet / le parcours restent une copie des tronçons d'origine.
Or : j'ai besoin que les différents tronçons soient bien dans le sens du parcours pour pouvoir les agréger proprement (pour ensuite les découper...).
J'ai bien vu le flag directed mais soit je sais pas m'en servir soit ça fait rien.
Le contexte : PostgeSQL 11.1 PostGIS 2.5 pgRouting 2.5 ou 2.6
Merci d'avance pour votre aide.
Service SIG Rennes Métropole
AITF : Coordinateur GT voies-adresse
Et un peu OSM Bzh
Hors ligne
#2 Thu 04 July 2019 13:46
- ChristopheV
- Membre
- Lieu: Ajaccio
- Date d'inscription: 7 Sep 2005
- Messages: 3199
- Site web
Re: pgRouting : obtenir des polylignes orientées dans le sens du trajet ?
Bonjour,
PGRouting possède souvent deux signatures pour ses fonctions. Graphe orienté si valeur "directed" omise ou true, si non (false explicit) graph non orienté.
Quand vous passez en topologie postgis vous aurez des noeuds mais aussi des arcs et ceux ci sont orientés de start_node vers end_node non ?
Christophe
L'avantage d'être une île c'est d'être une terre topologiquement close
Hors ligne
#3 Thu 04 July 2019 13:53
- MaelReboux
- Participant actif
- Lieu: Roazhon / Rennnes
- Date d'inscription: 24 Aug 2010
- Messages: 72
Re: pgRouting : obtenir des polylignes orientées dans le sens du trajet ?
ceux ci sont orientés de start_node vers end_node non
(j'ai pas ma BD avec moi)
Oui : les "edges" sont orientés dans ce sens là il me semble.
A partir de la topologie PostGIS je reconstruit une table / couche en dur. Je me sers de celle-ci pour fair ela topologie pgRouting et les itinéraires.
Ici un déroulé complet en fait : https://github.com/osm-bzh/ar_redadeg/b … outing.sql
Je pense que le problème est là : https://github.com/osm-bzh/ar_redadeg/b … l#L95-L111
Service SIG Rennes Métropole
AITF : Coordinateur GT voies-adresse
Et un peu OSM Bzh
Hors ligne
#4 Thu 04 July 2019 14:35
- tumasgiu
- Membre
- Lieu: Ajaccio
- Date d'inscription: 5 Jul 2010
- Messages: 1160
Re: pgRouting : obtenir des polylignes orientées dans le sens du trajet ?
Si j'ai bien compris :
pgr_dijsktra renvoie un tableau de pgr_costResult
Ce type contient une colonne seq qui indique l'ordre du chemin.
Dans la requête que vous avez indiqué (ligne 95 dans le fichier sur github),
il faut rajouter une clause order by pour ordonner les lignes dans
le sens du chemin.
Dernière modification par tumasgiu (Thu 04 July 2019 14:36)
En ligne
#5 Fri 05 July 2019 13:55
- MaelReboux
- Participant actif
- Lieu: Roazhon / Rennnes
- Date d'inscription: 24 Aug 2010
- Messages: 72
Re: pgRouting : obtenir des polylignes orientées dans le sens du trajet ?
Ce ne sont pas les lignes / enregistrements qui ne sont pas dans l'ordre du parcours.
C'est la géométrie de certaines lignes qui n'est pas dans le bon sens.
Ci-joint une image pour comprendre. Le trajet va vers le bas.
En rouge l'ordre des tronçons / ligne.
En bleu les noeuds de chaque ligne dans l'ordre de la géométrie.
Dernière modification par MaelReboux (Fri 05 July 2019 13:57)
Service SIG Rennes Métropole
AITF : Coordinateur GT voies-adresse
Et un peu OSM Bzh
Hors ligne
#6 Mon 08 July 2019 12:03
- tumasgiu
- Membre
- Lieu: Ajaccio
- Date d'inscription: 5 Jul 2010
- Messages: 1160
Re: pgRouting : obtenir des polylignes orientées dans le sens du trajet ?
Mon mauvais, j'avais dans l'idée que st_makeline pouvait faire ce genre de choses
Apparemment il n'y a pas de fonctions dans Postgis pour çà.
Mais avec une CTE recursive, ça doit pouvoir le faire,
performances non garanties (il faudra adapter à votre schema) :
Code:
WITH RECURSIVE r ( j, h, t ) AS ( ( SELECT seq, g, seq + 1 FROM foo WHERE seq = 1) UNION ALL ( SELECT i, CASE WHEN st_equals (st_endpoint (h), st_startpoint (g)) THEN g ELSE st_reverse (g) END, seq + 1 FROM foo JOIN r ON foo.seq = t) )
Il reste tout de même à déterminer si la première linestring
est dans la bonne direction, je le laisse à titre d'exercice
(et parceque j'ai un peu la flemme aussi)
Dernière modification par tumasgiu (Mon 08 July 2019 12:07)
En ligne
#7 Mon 02 September 2019 21:32
- MaelReboux
- Participant actif
- Lieu: Roazhon / Rennnes
- Date d'inscription: 24 Aug 2010
- Messages: 72
Re: pgRouting : obtenir des polylignes orientées dans le sens du trajet ?
Reprise après une pause estivale…
@tumasgiu je vais tester ta proposition. Je vois l'idée.
Début juillet j'avais trouvé une fonction expérimentale dans pgRouting. Mais je la retrouve pas là, forcément.
Service SIG Rennes Métropole
AITF : Coordinateur GT voies-adresse
Et un peu OSM Bzh
Hors ligne
Pages: 1
- Sujet précédent - pgRouting : obtenir des polylignes orientées dans le sens du trajet ? - Sujet suivant