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

Printemps des cartes 2024

#1 Sun 17 January 2021 15:02

stanichou
Juste Inscrit !
Date d'inscription: 16 Jan 2021
Messages: 6

QGIS: Legende avec autre champ que celui utilise pour style catgorise

Bonjour,

J'utilise un champ nommé "rnk" pour faire une symbologie catégorisée d'une couche. Seulement, je souhaiterais que la légende dans le composeur d'impression n'affiche pas les valeurs de ce champ "rnk" comme il le fait par défaut, mais les valeurs d'un autre champ nommé "idprop" et localisé dans la même table attributaire.

J'ai le plus grand mal à trouver une solution à un problème qui sur le papier ne paraît pas si compliqué.

J'ai testé plusieurs choses en utilisant la fonctionnalité pour filtrer la légende par expression.

Les 2 expressions suivantes semblent renvoyer le bon résultat dans l'aperçu, mais la légende se vide sitôt l'expression validée :

Code:

attribute(get_feature(@layer, 'rnk', attribute($currentfeature, 'rnk')), 'idprop')

Code:

attribute('idprop')

Et quand j'utilise l'expression suivante j'arrive à naviguer les différentes valeurs de la table en remplaçant X par les valeurs associées qui vont de 1 à 10. Il faudrait donc, j'imagine, trouver une variable qui se substitue à toutes les valeurs possibles pour le champ "rnk" :

Code:

attribute(get_feature(@layer, 'rnk', X), 'idprop')

Pour information j'utilise la version 3.10.11 de QGIS.

Merci pour votre aide.

Dernière modification par stanichou (Sun 17 January 2021 15:12)

Hors ligne

 

#2 Sun 17 January 2021 19:44

JD
Moderateur
Date d'inscription: 8 Aug 2013
Messages: 722

Re: QGIS: Legende avec autre champ que celui utilise pour style catgorise

Bonsoir,

je pense qu'il y a un problème de portée pour accéder aux variables et aux champs de la couche.

Pour que cela fonctionne il faut absolument qu'il y ait une relation 1:1 entre votre champs rnk et votre champs idprop

Code:

 concatenate("idprop", filter:="rnk" = @symbol_label)

Cordialement,

Hors ligne

 

#3 Mon 18 January 2021 10:48

stanichou
Juste Inscrit !
Date d'inscription: 16 Jan 2021
Messages: 6

Re: QGIS: Legende avec autre champ que celui utilise pour style catgorise

JD a écrit:

Bonsoir,

je pense qu'il y a un problème de portée pour accéder aux variables et aux champs de la couche.

Pour que cela fonctionne il faut absolument qu'il y ait une relation 1:1 entre votre champs rnk et votre champs idprop

Code:

 concatenate("idprop", filter:="rnk" = @symbol_label)

Cordialement,


Si la solution que vous proposez est sensée, celle-ci renvoie cependant " dans l'aperçu de résultat avec une légende vidée de son contenu. J'ai testé l'expression sous QGIS 3.10.11 et sur la dernière sortie (3.16.2) et j'obtiens malheureusement le même résultat.

Hors ligne

 

#4 Mon 18 January 2021 11:17

SANTANNA
Moderateur
Lieu: Angers
Date d'inscription: 18 Jan 2008
Messages: 3799

Re: QGIS: Legende avec autre champ que celui utilise pour style catgorise

Bonjour,
Je ne sais pas si j'ai bien tout saisi (je ne comprends pas la relation entre rnk et idprop : 1<->1 ou 1<->n voire n<->m) mais partant de la formule de JD et de la doc, quid de quelque chose comme ceci:

Code:

aggregate(@layer, 'concatenate', "idprop", filter:="rnk"=@symbol_label, concatenator:=', ')

Autrement, et ça rejoint certainement le point sur la relation entre les deux champs, pourquoi ne pas faire la symbologie sur idprop? Et pour info, il est possible de regrouper des catégories (clic droit sur une sélection de classes).

Hors ligne

 

#5 Tue 19 January 2021 09:20

stanichou
Juste Inscrit !
Date d'inscription: 16 Jan 2021
Messages: 6

Re: QGIS: Legende avec autre champ que celui utilise pour style catgorise

SANTANNA a écrit:

Autrement, et ça rejoint certainement le point sur la relation entre les deux champs, pourquoi ne pas faire la symbologie sur idprop?


Alors en fait j'ai un atlas sur lequel j'ai fait en sorte de ne pas avoir plus de 10 entités par carte. Je souhaiterais que pour chacune des cartes les couleurs restent figées en utilisant le champ "rnk" (càd que si mon entité X sur la carte1 a un "rnk" = 1 qui correspond à la couleur jaune, alors mon entité X sur la carte2 et un "rnk" = 1 sera lui aussi jaune).

Si je classe avec "idprop", j'aurais autant de couleurs qu'il y a d'idprop (227). Or, la distribution des couleurs aléatoires sur QGIS est souvent malheureuse et nuirait à la lisibilité des cartes. Et si j'utilise le géotraitement "coloration topologique", j'en reviens au même problème qu'avec "rnk" puisque je classerai cette fois la symbologie avec "color_id" qui aura autant si ce n'est plus de classes.

Ce qu'il faut retenir, c'est que dans la table attributaire de la couche que j'utilise, je peux avoir plusieurs lignes qui partagent le même "rnk" et le même "idprop". La différence réside dans l'emprise courante de l'atlas où je ne peux théoriquement pas avoir 2 entités avec le même "rnk" ni 2 entités avec le même "idprop".

Dans la capture d'écran que je joins à ce post j'aimerais simplement récupérer les "idprop" que j'ai mis ici sous la forme d'étiquettes pour les basculer dans la légende qui utilise les valeurs du champ "rnk".

En ce qui concerne votre code malheureusement j'obtiens le même résultat que pour celui de JD.


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

Hors ligne

 

#6 Tue 19 January 2021 13:09

SANTANNA
Moderateur
Lieu: Angers
Date d'inscription: 18 Jan 2008
Messages: 3799

Re: QGIS: Legende avec autre champ que celui utilise pour style catgorise

Bonjour,
On pourrait avoir un retour sur la formule proposée dans mon précédent message? De ce que je comprends de vos attentes, ça me semble matcher (à voir si un filtre spatial est requis ou pas)

Hors ligne

 

#7 Tue 19 January 2021 13:41

stanichou
Juste Inscrit !
Date d'inscription: 16 Jan 2021
Messages: 6

Re: QGIS: Legende avec autre champ que celui utilise pour style catgorise

SANTANNA a écrit:

Bonjour,
On pourrait avoir un retour sur la formule proposée dans mon précédent message? De ce que je comprends de vos attentes, ça me semble matcher (à voir si un filtre spatial est requis ou pas)


Voilà ce que j'obtiens en utilisant votre formule (cf. capture ci-joint).


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

Hors ligne

 

#8 Tue 19 January 2021 14:38

aheurion
Participant actif
Lieu: NANTES
Date d'inscription: 8 Oct 2020
Messages: 141

Re: QGIS: Legende avec autre champ que celui utilise pour style catgorise

Bonjour à vous !

J'ai l'impression que la fonction aggregate ne supporte pas de prendre un champ de la couche @layer comme sortie (cf PJ).
D'ailleurs si j'indique le champ brut ("idprop" tout seul dans l'expression) je retrouve le même souci : la légende affiche non pas le résultat mais la formule.

Si jamais cette information peut vous aider (je suis sous QGIS 3.16)


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

Hors ligne

 

#9 Tue 19 January 2021 15:59

SANTANNA
Moderateur
Lieu: Angers
Date d'inscription: 18 Jan 2008
Messages: 3799

Re: QGIS: Legende avec autre champ que celui utilise pour style catgorise

Je viens de tester ma suggestion sur une couche ici et ça marche (QGIS 3.16.2). La prévisualisation est parfois buggée mais après validation de la fenêtre, j'ai bien ma légende.
Par contre, essayez un champ autre que rnk, et qui ne soit pas numérique.ou typez votre champ en texte (to_string) ou encore utilisez une statistique applicable au nombre. Il semble que concatenate avec un champ numérique ne marche pas.


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

Hors ligne

 

#10 Tue 19 January 2021 16:49

stanichou
Juste Inscrit !
Date d'inscription: 16 Jan 2021
Messages: 6

Re: QGIS: Legende avec autre champ que celui utilise pour style catgorise

SANTANNA a écrit:

Je viens de tester ma suggestion sur une couche ici et ça marche (QGIS 3.16.2).


Vous avez raison la formule passe bien, je vous remercie.

Maintenant je me heurte à la difficulté d'avoir des valeurs partagées entre mes champs "idprop" et "rnk", c'est à dire une liste longue comme le bras (voir capture).

J'imagine qu'utiliser une expression comportant intersects($geometry, @atlas_geometry) serait indiqué ici pour ne conserver que les valeurs qui intersectent l'emprise de ma couche de couverture de l'atlas.

Seulement, est-ce encore possible avec la fonction aggregate ou dois-je me tourner plutôt vers la fonction attribute(get_feature(... ?

Merci encore pour votre aide.

Dernière modification par stanichou (Tue 19 January 2021 16:51)


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

Hors ligne

 

#11 Tue 19 January 2021 17:39

SANTANNA
Moderateur
Lieu: Angers
Date d'inscription: 18 Jan 2008
Messages: 3799

Re: QGIS: Legende avec autre champ que celui utilise pour style catgorise

J'imagine qu'utiliser une expression comportant intersects($geometry, @atlas_geometry) serait indiqué ici pour ne conserver que les valeurs qui intersectent l'emprise de ma couche de couverture de l'atlas.


A tester comme paramètre additionnel dans le "filter", avec un AND, soit

Code:

filter:= "rnk"=@symbol_label AND intersects($geometry, @atlas_geometry)

Hors ligne

 

#12 Tue 19 January 2021 17:56

stanichou
Juste Inscrit !
Date d'inscription: 16 Jan 2021
Messages: 6

Re: QGIS: Legende avec autre champ que celui utilise pour style catgorise

SANTANNA a écrit:

J'imagine qu'utiliser une expression comportant intersects($geometry, @atlas_geometry) serait indiqué ici pour ne conserver que les valeurs qui intersectent l'emprise de ma couche de couverture de l'atlas.


A tester comme paramètre additionnel dans le "filter", avec un AND, soit

Code:

filter:= "rnk"=@symbol_label AND intersects($geometry, @atlas_geometry)


Je vous tire mon chapeau. C'est exactement ce que je recherchais. Merci beaucoup.

Le code complet est donc le suivant :

Code:

aggregate(@layer, 'concatenate', "idprop", filter:="rnk"=@symbol_label AND intersects($geometry, @atlas_geometry), concatenator:=', ')

En espérant que ce sujet servira à d'autres qui ont déjà été confronté à un problème similaire.

EDIT : grosse déception à l'export de l'atlas où les valeurs par défaut reprennent le dessus. Même constat que ce soit sur la version 3.10.11 que j'utilise ou la 3.16.2, format image ou pdf. J'ignore si c'est une limitation de QGIS ou une option spécifique à cocher mais c'est assez frustrant arrivé si près du but.

Dernière modification par stanichou (Tue 19 January 2021 21:09)

Hors ligne

 

#13 Wed 20 January 2021 10:06

SANTANNA
Moderateur
Lieu: Angers
Date d'inscription: 18 Jan 2008
Messages: 3799

Re: QGIS: Legende avec autre champ que celui utilise pour style catgorise

Bonjour,

EDIT : grosse déception à l'export de l'atlas où les valeurs par défaut reprennent le dessus. Même constat que ce soit sur la version 3.10.11 que j'utilise ou la 3.16.2, format image ou pdf. J'ignore si c'est une limitation de QGIS ou une option spécifique à cocher mais c'est assez frustrant arrivé si près du but.


Ne restez pas sur votre déception, remontez le bug aux développeurs, c'est comme cela qu'il aura plus de chances d'être vite corrigé (et pour info, on est en pleine période de correction de bogues, pré-sortie de version). Un extrait minimaliste du projet (certainement, avec un bout de données retouchées vu qu'on est sur majic) aiderait encore plus. VOUS avez la possibilité de faire avancer les choses.

Hors ligne

 

Pied de page des forums

Powered by FluxBB