#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: 1092
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