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 Thu 03 August 2023 10:57

LPlante
Participant occasionnel
Date d'inscription: 17 Nov 2021
Messages: 44

QGIS: overlay_interstct() du centroid d'une ligne

Bonjour,

Pour récupérer le nom de commune automatiquement (depuis une couche polygo commune) au dessin d'une ligne, j'utilise l'outil overlay_intersect() en valeur par default.    overlay_intersect("couche_commune", nom_commune)

Je tombe sur le cas particulier où une ligne intersecte 2 communes, renvoi donc 2 valeurs pour un champs et empêche donc l'enregistrement.

L'ajout du parametre LIMIT :=1 me permet d'avoir qu'un seul résultat ce qui contourne l'erreur.

La question est: peut on utiliser le centroid de la ligne pour l'overlay_intersect qui lui renverrai à coup sur qu'une seule commune sans créer de couche supplémentaire qui calcul le centroid.

Du genre,   WITH geom=centroid(geom)  (overlay_intersects('ERROBI-COMMUNES',nom,limit:=1))

Cela permettrait d'aller plus loin avec startpoint et endpoint pour récupérer des identifiants de points au depart ou fin d'une ligne par exemple!

Merci d'avance!

Hors ligne

 

#2 Thu 03 August 2023 11:54

shirosaki
Participant actif
Lieu: Lyon
Date d'inscription: 30 Mar 2018
Messages: 125

Re: QGIS: overlay_interstct() du centroid d'une ligne

Bonjour,

Je tiens à préciser qu'il n'est actuellement pas possible de définir une géométrie différente lors de l'utilisation des formules overlay_xxx dans QGIS. J'avais moi-même souligné cette limitation dans un ticket sur le dépôt Github de QGIS, que vous pouvez trouver ici : https://github.com/qgis/QGIS/issues/44652

Cependant, il y a une solution alternative qui pourrait vous convenir. Vous pouvez réaliser ce que vous souhaitez en utilisant des couches virtuelles et en effectuant une jointure. J'ai créé un exemple de projet illustrant cette méthode. Vous pouvez accéder au projet via le lien suivant : https://github.com/shirosaki07/test_for … ual_layers

Cordialement.

Dernière modification par shirosaki (Thu 03 August 2023 11:56)


Paul QUESNOT

Hors ligne

 

#3 Thu 03 August 2023 13:10

LPlante
Participant occasionnel
Date d'inscription: 17 Nov 2021
Messages: 44

Re: QGIS: overlay_interstct() du centroid d'une ligne

Merci d'avoir partagé le ticket!

Je ne sais pas par quelle magie l'un des contributeurs à sortie cette requête mais elle fonctionne parfaitement!!

aggregate(
  layer:='node',
  aggregate:='concatenate',
  expression:="data",
  filter:=intersects(
    $geometry,
    start_point(geometry(@parent))  -- if the parent layer is the one with the lines
  )
)

Par contre elle est pas du tout limpide dans ma tête pour être capable de la réécrire sans modèle.

Hors ligne

 

#4 Thu 03 August 2023 14:26

GlaDal
Participant assidu
Date d'inscription: 30 Aug 2013
Messages: 1087

Re: QGIS: overlay_interstct() du centroid d'une ligne

Bonjour,

A noter que cette expression prend en compte le premier noeud de la ligne pour calculer l'intersection (start_point) et non le centroide comme vous le souhaitiez. Je ne sais pas si c'est important pour vous.

Hors ligne

 

#5 Thu 03 August 2023 14:37

LPlante
Participant occasionnel
Date d'inscription: 17 Nov 2021
Messages: 44

Re: QGIS: overlay_interstct() du centroid d'une ligne

Pour sur, justement c'était la suite de ma recherche, d'utiliser le start/end_point.

Cependant j'ai du remplacer le parametre aggregate='concatenate' par 'max'

Est ce que le concatenate vaut pour une chaine de caractere, et le max/min permet de récupérer un integer? (si tenté qu'il y ai plusieurs valeurs récupérées je présume)
Exemple 'concatenate' pour récupérer le nom de commune et 'max' pour le code insse(en integer)

Hors ligne

 

#6 Thu 03 August 2023 14:59

LPlante
Participant occasionnel
Date d'inscription: 17 Nov 2021
Messages: 44

Re: QGIS: overlay_interstct() du centroid d'une ligne

Buter sur le overlay_intersect m'a induit en erreur pour faire mes recherches dans le forum.

Le sujet avait déjà été étudié avec le aggregate. Belle avancée
https://georezo.net/forum/viewtopic.php?id=124578

Hors ligne

 

Pied de page des forums

Powered by FluxBB