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

State Of The Map 2024

#1 Wed 23 June 2021 09:03

conejo
Participant assidu
Lieu: Lunel
Date d'inscription: 2 Dec 2005
Messages: 1647

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: 1647

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: 1647

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: 1647

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: 3824

Re: QGIS: Afficher les communes qui intersectent une ligne

Bonjour,

conejo a écrit:

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: 1647

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: 3824

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: 1647

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: 3824

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: 1647

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: 3824

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: 1647

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 smile

Hors ligne

 

#14 Fri 25 June 2021 17:07

conejo
Participant assidu
Lieu: Lunel
Date d'inscription: 2 Dec 2005
Messages: 1647

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 smile

Hors ligne

 

#16 Fri 25 June 2021 17:27

conejo
Participant assidu
Lieu: Lunel
Date d'inscription: 2 Dec 2005
Messages: 1647

Re: QGIS: Afficher les communes qui intersectent une ligne

Oui c'est possible mais j'ai beaucoup appris de Santanna!

Hors ligne

 

Pied de page des forums

Powered by FluxBB