Pages: 1
- Sujet précédent - QGIS: Legende avec autre champ que celui utilise pour style catgorise - Sujet suivant
#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: 726
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
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 idpropCode:
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: 3947
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
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.
Hors ligne
#6 Tue 19 January 2021 13:09
- SANTANNA
- Moderateur
- Lieu: Angers
- Date d'inscription: 18 Jan 2008
- Messages: 3947
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
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).
Hors ligne
#8 Tue 19 January 2021 14:38
- aheurion
- Participant actif
- Lieu: NANTES
- Date d'inscription: 8 Oct 2020
- Messages: 143
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)
Hors ligne
#9 Tue 19 January 2021 15:59
- SANTANNA
- Moderateur
- Lieu: Angers
- Date d'inscription: 18 Jan 2008
- Messages: 3947
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.
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
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)
Hors ligne
#11 Tue 19 January 2021 17:39
- SANTANNA
- Moderateur
- Lieu: Angers
- Date d'inscription: 18 Jan 2008
- Messages: 3947
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
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, soitCode:
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: 3947
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
Pages: 1
- Sujet précédent - QGIS: Legende avec autre champ que celui utilise pour style catgorise - Sujet suivant