banniere

Le portail francophone de la géomatique


Toujours pas inscrit ? Mot de passe oublié ?
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oublié ?

Annonce

Rencontres QGIS 2025

L'appel à participation est ouvert jusqu'au 19 janvier 2025!

#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)

Hors 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)


Fichier(s) joint(s) :
Pour accéder aux fichiers vous devez vous inscrire.

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 sad
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)

Hors 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

 

Pied de page des forums

Powered by FluxBB