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 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.


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

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)


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

Mathieu
C'est en forgeant qu'on devient forgeron

Hors ligne

 

Pied de page des forums

Powered by FluxBB