Pages: 1
- Sujet précédent - [Postgre 9.4.1 / Postgis 2.1.5] Union de tronçons linéaires - Sujet suivant
#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: 3199
- 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: 3199
- 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
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
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
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
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 ;-)
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
Pages: 1
- Sujet précédent - [Postgre 9.4.1 / Postgis 2.1.5] Union de tronçons linéaires - Sujet suivant