#1 Wed 23 June 2021 09:03
- conejo
- Participant assidu
- Lieu: Lunel
- Date d'inscription: 2 Dec 2005
- Messages: 1667
QGIS: Afficher les communes qui intersectent une ligne
Bonjour,
Lors d'un précédent post, j'avais demandé d'afficher dans un cadre texte du composeur, les communes visibles sur la carte avec cette expression qui fonctionne :
'Commune(s) de ' || '' || aggregate('Communes','concatenate',"tex2", concatenator:=' - ',order_by:="tex2",filter:=intersects($geometry, map_get( item_variables('id_page'), 'map_extent')))
Serait-il possible d'affiner le filtre pour n'afficher que les communes qui intersectent dans la carte une ligne électrique?
Merci
Hors ligne
#2 Wed 23 June 2021 16:11
- conejo
- Participant assidu
- Lieu: Lunel
- Date d'inscription: 2 Dec 2005
- Messages: 1667
Re: QGIS: Afficher les communes qui intersectent une ligne
Je pense bloquer à partir de filter:=intersects
Hors ligne
#3 Thu 24 June 2021 13:08
- conejo
- Participant assidu
- Lieu: Lunel
- Date d'inscription: 2 Dec 2005
- Messages: 1667
Re: QGIS: Afficher les communes qui intersectent une ligne
Je n'arrive pas à filtrer les communes qui intersectent la ligne électrique au sein de l'emprise de la carte...
Qqn a une solution?
Hors ligne
#4 Fri 25 June 2021 10:03
- conejo
- Participant assidu
- Lieu: Lunel
- Date d'inscription: 2 Dec 2005
- Messages: 1667
Re: QGIS: Afficher les communes qui intersectent une ligne
Bonjour,
Je reviens vers vous, je sais j'insiste mais ce que j'arrive à faire avec filter:=intersects pour afficher les communes qui sont dans l'emprise de la carte, pourquoi je n'arrive pas à le faire pour les communes qui sont traversées par une ligne électrique?
'Commune(s) de ' || '' || aggregate('Communes','concatenate',"tex2", concatenator:=' - ',order_by:="tex2",filter:=intersects($geometry, map_get( item_variables('id_page'), 'map_extent')))
J'ai essayé de faire la requête rien qu'avec la ligne électrique (ici Trace preferentiel_com), mais l'expression est invalide :
'Commune(s) de ' || '' || aggregate('Communes','concatenate',"tex2", concatenator:=' - ',order_by:="tex2",filter:=intersects($geometry, 'Trace preferentiel_com’)))
Hors ligne
#5 Fri 25 June 2021 10:50
- SANTANNA
- Moderateur
- Lieu: Angers
- Date d'inscription: 18 Jan 2008
- Messages: 3927
Re: QGIS: Afficher les communes qui intersectent une ligne
Bonjour,
intersects($geometry, 'Trace preferentiel_com’)
intersects prend en argument deux géométries, et 'Trace preferentiel_com' n'en est pas un (et attention au caractère après le m); c'est à ce stade juste du texte pour QGIS (le message d'erreur l'indique peut-être).
En supposant que 'Trace preferentiel_com' est le nom de la couche des lignes électriques et que vous êtes sur une version 3.16 minimum,
essayez donc avec (non testé!!!)
Code:
filter:=intersects($geometry, map_get( item_variables('id_page'), 'map_extent')) AND overlay_intersects('Trace preferentiel_com')-- on ajoute une autre condition qui renvoie vrai ou faux selon qu'un objet ligne électrique (PEU IMPORTE LEQUEL!!!) est superposé à la commune
Je n'ai pas compris si vous faites un atlas sur les lignes électriques ou pas, auquel cas, une alternative pourrait être d'utiliser la géométrie de l'entité ligne électrique qui fait l'atlas, soit
Code:
filter:=intersects($geometry, map_get( item_variables('id_page'), 'map_extent')) AND intersects($geometry, @atlas_geometry)
Hors ligne
#6 Fri 25 June 2021 12:15
- conejo
- Participant assidu
- Lieu: Lunel
- Date d'inscription: 2 Dec 2005
- Messages: 1667
Re: QGIS: Afficher les communes qui intersectent une ligne
Merci Santanna, cela marche.
Sur mon texte, j'ai 'Commune(s) de'. Pas très élégant lorsqu'il y a une seule commune. J'ai donc adapté le code en fonction du nombre de communes :
CASE WHEN
aggregate('Communes','count',"Tex2", filter:=intersects($geometry, map_get( item_variables('id_page'), 'map_extent'))
AND overlay_intersects('Trace preferentiel_com'))=1 then 'Commune de ' else 'Communes(s) de 'end || '' || aggregate('Communes','concatenate',"tex2", concatenator:=' - ',order_by:="tex2",filter:=intersects($geometry, map_get( item_variables('id_page'), 'map_extent'))
AND overlay_intersects('Trace preferentiel_com'))
Hors ligne
#7 Fri 25 June 2021 12:28
- SANTANNA
- Moderateur
- Lieu: Angers
- Date d'inscription: 18 Jan 2008
- Messages: 3927
Re: QGIS: Afficher les communes qui intersectent une ligne
Ah cool, alors.
C'est peut-être des coquilles dues à la saisie mais vous avez Tex2 et tex2, et "then 'Commune de ' else 'Communes(s) de ' end
Hors ligne
#8 Fri 25 June 2021 14:26
- conejo
- Participant assidu
- Lieu: Lunel
- Date d'inscription: 2 Dec 2005
- Messages: 1667
Re: QGIS: Afficher les communes qui intersectent une ligne
Je ne pense pas que cela joue, T ou t, c'est moi qui ai saisi 'Communes(s) de '
J'ai qd même rectifié :
CASE WHEN
aggregate('Communes','count',"tex2", filter:=intersects($geometry, map_get( item_variables('id_page'), 'map_extent'))
AND overlay_intersects('Trace preferentiel_com'))=1 then 'Commune de ' else 'Communes de 'end || '' || aggregate('Communes','concatenate',"tex2", concatenator:=' - ',order_by:="tex2",filter:=intersects($geometry, map_get( item_variables('id_page'), 'map_extent'))
AND overlay_intersects('Trace preferentiel_com'))
Hors ligne
#9 Fri 25 June 2021 14:48
- SANTANNA
- Moderateur
- Lieu: Angers
- Date d'inscription: 18 Jan 2008
- Messages: 3927
Re: QGIS: Afficher les communes qui intersectent une ligne
Par curiosité, pourriez-vous me dire ce que renvoie le code ci-après? On utilise une variable (de type array) qui stocke la liste des communes concernées et on en extraie au besoin le compte ou le contenu. Je ne sais pas si ça rend l'expression plus lisible (pour tous) mais si une condition doit changer, la modif se ferait en un seul endroit (et je pense que c'est potentiellement plus rapide comme requête).
Code:
with_variable( 'malistedecommunes', aggregate('Communes','array_agg',"tex2", filter:=intersects($geometry, map_get( item_variables('id_page'), 'map_extent')) AND overlay_intersects('Trace preferentiel_com')), concat( CASE WHEN array_length(@malistedecommunes) = 1 THEN 'Commune de ' ELSE 'Communes de ' END, array_to_string(@malistedecommunes, ' - ') ) )
Dernière modification par SANTANNA (Fri 25 June 2021 16:13)
Hors ligne
#10 Fri 25 June 2021 15:55
- conejo
- Participant assidu
- Lieu: Lunel
- Date d'inscription: 2 Dec 2005
- Messages: 1667
Re: QGIS: Afficher les communes qui intersectent une ligne
Tel quel cela ne fonctionne pas, l'expression est invalide. Je ne comprends pas "malistedecommunes', faut le mettre tel quel?
Hors ligne
#11 Fri 25 June 2021 16:20
- SANTANNA
- Moderateur
- Lieu: Angers
- Date d'inscription: 18 Jan 2008
- Messages: 3927
Re: QGIS: Afficher les communes qui intersectent une ligne
Désolé, il y avait une faute: c'est with_variable et non with_variables.
Je ne comprends pas "malistedecommunes', faut le mettre tel quel?
malistedecommunes est un nom comme un autre. C'est le nom que je donne à la variable dans laquelle je vais stocker la liste des communes qui remplissent les conditions du aggregate. Par contre, oui, il faut garder le même et lors de sa première apparition, c'est du texte donc il faut le mettre entre apostrophes, et pas de guillemets double.
Hors ligne
#12 Fri 25 June 2021 16:46
- conejo
- Participant assidu
- Lieu: Lunel
- Date d'inscription: 2 Dec 2005
- Messages: 1667
Re: QGIS: Afficher les communes qui intersectent une ligne
Oui cela fonctionne. Pouvez-vous m'expliquer la nuance entre les deux expressions?
Hors ligne
#13 Fri 25 June 2021 17:02
- Miniopterine
- Participant assidu
- Date d'inscription: 29 Nov 2005
- Messages: 278
Re: QGIS: Afficher les communes qui intersectent une ligne
En tout cas merci Conejo et Santanna, j'apprends beaucoup avec vous, notamment avec les énormes potentialités de la fonction agrégat qui semble la solution à tellement de questions
Hors ligne
#14 Fri 25 June 2021 17:07
- conejo
- Participant assidu
- Lieu: Lunel
- Date d'inscription: 2 Dec 2005
- Messages: 1667
Re: QGIS: Afficher les communes qui intersectent une ligne
Miniopterine : merci pour ton compliment, mais c'est plutôt Santanna qu'il faut remercier. Je propose et il dispose...
Hors ligne
#15 Fri 25 June 2021 17:08
- Miniopterine
- Participant assidu
- Date d'inscription: 29 Nov 2005
- Messages: 278
Re: QGIS: Afficher les communes qui intersectent une ligne
Pas totalement vrai: tes problématiques et ton utilisation de Qgis sont très poussés et intéressants
Hors ligne
#16 Fri 25 June 2021 17:27
- conejo
- Participant assidu
- Lieu: Lunel
- Date d'inscription: 2 Dec 2005
- Messages: 1667
Re: QGIS: Afficher les communes qui intersectent une ligne
Oui c'est possible mais j'ai beaucoup appris de Santanna!
Hors ligne