Nous utilisons des cookies pour vous garantir la meilleure expérience sur notre site. Si vous continuez à utiliser ce dernier, nous considèrerons que vous acceptez l'utilisation des cookies. J'ai compris ! ou En savoir plus !.
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 Tue 22 November 2016 09:39

mfangain
Participant actif
Date d'inscription: 12 Jun 2012
Messages: 88

[Postgre 9.4.1 / Postgis 2.1.5] Union de tronçons linéaires

Bonjour,

Dans le cadre de la gestion d'un réseau de bus, je souhaite gérer les itinéraires de chaque ligne de bus en passant par des tronçons unitaires (entre 2 arrêts de bus et/ou entre croisements de lignes).

Je dispose donc  :
     - d'une table avec l'ensemble de mes tronçons, au format linestring,
     - d'une table sans géométrie décrivant pour chaque itinéraire la succession des tronçons (enregistrements du type : identifiant itinéraire / identifiant tronçon / numéro d'ordre)

Et je souhaite créer une vue qui reconstruit la géométrie des itinéraires sur la base de ces 2 tables. Ou bien une table qui se remplit par trigger, en fonction des performances.

J'ai tenté plusieurs requêtes (sur la base de ST_UNION ou ST_COLLECT). D'une part avec ces opérateurs je ne peux pas indiquer l'ordre de mes tronçons, et d'autre part je n'arrive de toute façon pas au résultat voulu. J'ai testé sur une ligne, pour laquelle j'attendrais 2 itinéraires (aller et retour) et en fait je n'obtiens qu'un seul itinéraire, incomplet car correspondant au 1e tronçon uniquement.

Est-ce que quelqu'un aurait une piste sur la requête à utiliser?

Merci d'avance pour votre aide!

MFANGAIN

Hors ligne

 

#2 Tue 22 November 2016 11:47

ChristopheV
Membre
Lieu: Ajaccio
Date d'inscription: 7 Sep 2005
Messages: 3197
Site web

Re: [Postgre 9.4.1 / Postgis 2.1.5] Union de tronçons linéaires

Bonjour

Si vous êtes sur postgres/postgis une piste serait d'utiliser la topologie (arc orientés).


Christophe
L'avantage d'être une île c'est d'être une terre topologiquement close

Hors ligne

 

#3 Tue 22 November 2016 12:14

mfangain
Participant actif
Date d'inscription: 12 Jun 2012
Messages: 88

Re: [Postgre 9.4.1 / Postgis 2.1.5] Union de tronçons linéaires

Bonjour Christophe,

Merci pour votre aide.

J'ai lu dans mes recherches que la topologie dans postgis posait des problèmes d'affichage dans les SIG.

Comme :
- je ne sais pas trop quelles conséquences cela aura sur l'ensemble de mes données d'utiliser la topologie
- mon objectif n'est pas de calculer des itinéraires (nous avons d'autres outils qui font ça très bien à partir des données GTFS),

j'avais laissé cette possibilité de côté.

Mais je vais peut-être devoir me plonger plus sérieusement dans ce sujet ;-)

MFANGAIN

Hors ligne

 

#4 Tue 22 November 2016 12:39

Nicolas Ribot
Membre
Lieu: Toulouse
Date d'inscription: 9 Sep 2005
Messages: 1554

Re: [Postgre 9.4.1 / Postgis 2.1.5] Union de tronçons linéaires

Bonjour,

Si vous voulez construire les lignes a partir des troncons dans un ordre, utilisez la clause ORDER BY dans votre requete faisant la jointure entre geo et attributs, puis utilisez st_lineMerge pour construire les itinéraires.

Nicolas

Hors ligne

 

#5 Tue 22 November 2016 14:30

ChristopheV
Membre
Lieu: Ajaccio
Date d'inscription: 7 Sep 2005
Messages: 3197
Site web

Re: [Postgre 9.4.1 / Postgis 2.1.5] Union de tronçons linéaires

Bonjour,

J'ai lu dans mes recherches que la topologie dans postgis posait des problèmes d'affichage dans les SIG


Oui et non. L'affichage de la couche "edge_data" du schema topologie ne pose pas de problème, en revanche l'affichage des objets métiers liés à la topologie est un peu lent sous QGis par exemple.
Merci de ne pas employer le terme SIG pour le terme "logiciel SIG", car postgres/postgis est un SIG, QGis un logiciel SIG.

L'avantage d'utiliser la topologie est d'avoir des arcs orientés et d'être sur qu'un nœud est un nœud.


Christophe
L'avantage d'être une île c'est d'être une terre topologiquement close

Hors ligne

 

#6 Tue 22 November 2016 14:31

mfangain
Participant actif
Date d'inscription: 12 Jun 2012
Messages: 88

Re: [Postgre 9.4.1 / Postgis 2.1.5] Union de tronçons linéaires

Bonjour Nicolas,

J'avais essayé la clause order by mais elle ordonnait le résultat et pas les tronçons en amont.

Suite à votre message, j'ai réessayé st_linemerge en essayant de mettre la clause order by "plus haut".

Ca me donne une requête du type :

SELECT ti.iti_code,
    st_linemerge(st_union(t.geom)) AS geom
   FROM mestroncons t,
    ( SELECT ti_1.id,
            ti_1.iti_code,
            ti_1.id_troncon,
            ti_1.ordre
           FROM troncons_itineraires ti_1
          WHERE ti_1.iti_code::text ~~ '0001%'::text
          ORDER BY ti_1.ordre) ti
  WHERE t.id_troncon::text = ti.id_troncon::text
  GROUP BY ti.iti_code;

La requête s'exécute sans erreur, mais le résultat obtenu est toujours seulement le premier tronçon du 2e itinéraire...

Hors ligne

 

#7 Tue 22 November 2016 14:38

Loic_GR
Moderateur
Lieu: Besancon
Date d'inscription: 12 May 2011
Messages: 1024
Site web

Re: [Postgre 9.4.1 / Postgis 2.1.5] Union de tronçons linéaires

Si on avait un petit jeu de données on pourrait se lancer dans un test de requête smile


Freelance traitements ETL FME certifié: www.sitdi-france.fr Twitter : @sitdifrance
Site perso ~ www.partir-en-vtt.com

Hors ligne

 

#8 Wed 23 November 2016 00:01

JD
Moderateur
Date d'inscription: 8 Aug 2013
Messages: 726

Re: [Postgre 9.4.1 / Postgis 2.1.5] Union de tronçons linéaires

ChristopheV a écrit:

Merci de ne pas employer le terme SIG pour le terme "logiciel SIG", car postgres/postgis est un SIG, QGis un logiciel SIG.


D accord pour employer le terme "logiciel SIG" . En revanche, j'émets des réserves à restreindre Qgis à un "logiciel SIG" quand on sait qu il y a aussi un serveur cartographique et une API. Mais c'est histoire de chipoter.

Sinon,
Je pense que vous devrez faire appel à la fonction st_reverse pour générer le parcours dans l'autre sens.
Linemerge troncon1 et troncon2 donne le même résultat que Linemerge troncon2 et troncon1 car les polylignes sont orientées.

Sinon +1 pour le partage d'un jeu de données.
Cordialement,

Dernière modification par lejedi76 (Wed 23 November 2016 00:12)

Hors ligne

 

#9 Wed 23 November 2016 09:22

mfangain
Participant actif
Date d'inscription: 12 Jun 2012
Messages: 88

Re: [Postgre 9.4.1 / Postgis 2.1.5] Union de tronçons linéaires

Voici un jeu de test sur la 1e ligne de notre réseau.

Un zip contenant les troncons (linestring, EPSG 3948), et un fichier csv contenant la succession des troncons à utiliser pour reconstituer l'itinéraire.

Pour l'aller et le retour, j'ai en fait 2 tronçons qui se superposent pour chacun des sens, car il y a des cas où le trajet n'est pas exactement le même (par exemple quand l'itinéraire passe par une 4 voies).

Merci pour votre aide.

MFANGAIN


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

Hors ligne

 

#10 Wed 23 November 2016 09:41

mfangain
Participant actif
Date d'inscription: 12 Jun 2012
Messages: 88

Re: [Postgre 9.4.1 / Postgis 2.1.5] Union de tronçons linéaires

N'ayant pas réussi à mettre les 2 fichiers dans le précédent message, voici le 2e ;-)


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

Hors ligne

 

#11 Wed 23 November 2016 12:43

Nicolas Ribot
Membre
Lieu: Toulouse
Date d'inscription: 9 Sep 2005
Messages: 1554

Re: [Postgre 9.4.1 / Postgis 2.1.5] Union de tronçons linéaires

Bonjour,

Il y a un souci avec les données non ?
Le CSV se joint tres mal avec le shp des troncons. troncon.id_troncon est tjs quasi null.

Quelles sont les colonnes de chaque table permettant de faire le lien entre les deux ?

Nicolas

Hors ligne

 

#12 Thu 24 November 2016 09:44

mfangain
Participant actif
Date d'inscription: 12 Jun 2012
Messages: 88

Re: [Postgre 9.4.1 / Postgis 2.1.5] Union de tronçons linéaires

Bonjour,

Effectivement, il y a un souci avec ce jeu de données, j'avais oublié de regénérer l'id des troncons...
Du coup, la requête ci-dessus fonctionne, et le rendu visuel a l'air correct. Je vais continuer mes tests sur des cas plus compliqués pour voir si tout se comporte correctement.
Désolée pour l'erreur, et merci à tous pour votre aide!

MFANGAIN

Hors ligne

 

Pied de page des forums

Powered by FluxBB