Union de plusieurs linestring depuis un id défini jusqu'à une condition de fin

Extraire des données OSM, créer sa carte, uMap, utiliser sur un GPS ou un smartphone...
nico2603
Messages : 4
Inscription : lun. déc. 30, 2019 2:30 pm

Union de plusieurs linestring depuis un id défini jusqu'à une condition de fin

Message par nico2603 » ven. janv. 03, 2020 2:25 pm

Bonjour,

Je cherche à reconstituer une seule grande géométrie issue de l'union de plusieurs petites, mais en partant d'une géométrie précise (id défini) et en remontant de géométrie en géométrie tant qu'un critère précis est valide.

Un exemple sera plus parlant : prenons un tracé de route (A11 direction Paris - Nantes), constitué de x linestring (chacun contenant le champ nom = A11), dont la première contient le champ id = 23. Est-il possible de reconstituer en une seule requête une seule linestring "A11" issue de l'union des x linestring constituant le tracé, en disant en gros, tu pars de l'id = 23, et tu fais ST_UNION tant que le champ nom = A11 (et éventuellement tant que l'id = 68 n'a pas été rencontré) ?

J'ai tenté un exemple trouvé qui me semblait cohérent, WHERE ST_StartPoint(the_geom) && ST_EndPoint(the_geom) IS TRUE AND id IN (23) AND name = 'A11' mais j'ai un message d'erreur "argument on IS TRUE must be type boolean, not type geometry"... :?

Pourquoi intégrer une condition sur l'ID ? Parce que dans le cas d'une autoroute on a deux objets pour un même nom, puisque les voies sont en sens unique. Et je ne souhaite pas intégrer dans la géométrie Paris Nantes les linestring de la géométrie Nantes Paris. Je n'ai trouvé que cette idée, si vous en avez d'autres je suis preneur.

Merci d'avance

JBosm
Messages : 80
Inscription : lun. avr. 22, 2013 12:43 pm

Re: Union de plusieurs linestring depuis un id défini jusqu'à une condition de fin

Message par JBosm » ven. janv. 03, 2020 7:31 pm

Là, tu commences à rigoler !
Je dirais, regarde du coté de ST_Linemerge sur les éléments que tu cherches à joindre, puis dans le résultat, tu prends la linestring qui contient l'élément que tu avais comme point de départ (un ST_Distance=0 sera plus efficace que de comparer les points de départ et d'arrivée, je pense).
Ça, c'est si tout se passe bien. Et ça devrait donner le même résultat que ce que tu cherches à faire.
Le problème, c'est que ça ne m'étonnerait qu'à moitié que ça ne fonctionne pas… Entre un name (regarde aussi le tag ref, parfois plus efficace) qui n'est pas bien indiqué, les voies aller-retour qui se connecteraient pour une raison ou pour une autre…
Tu verras au final !
PS : je n'ai jamais utilisé pg_routing, peut-être serait-il une alternative possible

Avatar de l’utilisateur
cquest
Messages : 1969
Inscription : ven. avr. 16, 2010 12:22 am
Localisation : Val de Marne
Contact :

Re: Union de plusieurs linestring depuis un id défini jusqu'à une condition de fin

Message par cquest » sam. janv. 04, 2020 8:55 am

ST_LineMerge serait aussi mon choix naturel, c'est son boulot de rabouter les linestring.

Pour que ça fonctionne au mieux, même highway=* ref=* et oneway=* (pour éviter le mélange de portions à sens unique ou pas qui vont faire rejoindre les 2 sens de circulation, je pense aux grandes routes qui ne sont pas qu'à voies séparées.

Les étapes:

1) sélection des linestring
2) st_linemerge pour les rabouter > GEOMETRYCOLLECTION en retour
3) st_dump pour récupérer une linestring de chaque section raboutée
4) sélection de la bonne avec un ST_Distance qui sera à 0 avec le milieu de la linestring de départ

Répondre

Qui est en ligne ?

Utilisateurs parcourant ce forum : Aucun utilisateur inscrit et 8 invités