#1 Thu 16 September 2021 11:58
- preliator
- Participant assidu
- Date d'inscription: 17 Nov 2018
- Messages: 433
Extraire auto-intersection de MultiLineString
Bonjour,
Je dispose d'une couche de lignes de 3 entités qui s'intersectent.
https://zupimages.net/viewer.php?id=21/37/67j7.jpg
Je souhaiterais extraire les parties de lignes qui s'intersectent, et renseigner cette information d'auto-intersection dans une colonne (1 si le troncon intersecte d'autres lignes, 0 sinon par exemple).
L'objectif, c'est de transférer par la suite cette couche sur QGis et appliquer un décallage dans le style des couches extraites pour voir les zones où plusieurs lignes se croisent. Voici un exemple que j'avais réalisé sur des lignes très simples.
https://zupimages.net/viewer.php?id=21/37/yimr.jpg
Est-il possible de faire cela sur PostGis ? Je pose en pièce jointe l'exemple des lignes.
Merci.
Hors ligne
#2 Fri 17 September 2021 13:22
- Mathieu Denat
- Participant actif
- Lieu: Montpellier
- Date d'inscription: 5 May 2010
- Messages: 110
Re: Extraire auto-intersection de MultiLineString
Bonjour Preliator,
Une piste à affiner:
- faire un dump des lignes en conservant: id, geométrie et chemin (path). En soi la géométrie et l'id suffiraient, mais le path te sera peut-être utile pour la suite?
- grouper par géométrie et stocker dans un tableau l'id de la route d'origine
- ne garder que les enregistrements pour lesquels le tableau à plus d'une valeur (les intersections donc)
Code:
with tmp as ( select route_id, (st_dump(geom)).geom geom, (st_dump(geom)).path id from test.line ) ,tmp1 as ( select array_agg(distinct t.route_id order by t.route_id) route_id, t.geom, array_agg(t.id) id from tmp t group by t.geom ) select * from tmp1 where array_length(route_id,1) > 1
A toutes fins utiles la doc w3c sur les fonctions array: https://www.w3resource.com/PostgreSQL/p … nction.php
J'ai testé vite fait, mais il semblerait que les superpositions ne ressortent pas comme il faut (voir capture en PJ).
Erreurs au niveau de la flèche et du cercle.
À creuser donc.
Dernière modification par Mathieu Denat (Fri 17 September 2021 13:23)
Mathieu
C'est en forgeant qu'on devient forgeron
Hors ligne