#1 Tue 05 March 2019 17:37
- Renaud
- Membre
- Lieu: Ploemeur (56)
- Date d'inscription: 9 Mar 2006
- Messages: 2315
QGIS 3.4: Fonction 'attribute()' et symbologie
Bonjour,
QGIS a un comportement bizarre lorsque je cherche à faire une symbologie à partir d'un champ calculé contenant la fonction 'attribute'.
Le champ calculé contient plusieurs valeurs quand j'affiche la table.
Mais lorsque je fais la symbologie, il met tout mes objets dans la même classe.
Si je remplace la fonction 'attribute' par le nom d'un champ, la symbologie est correcte.
Pour illustrer :
Bien interprétée dans la table mais la symbologie basée sur le champ est fausse :
Code:
case when "seuil1" is not null and attribute($currentfeature,"proba90")<= "seuil1" then 1 else 2 end
Bien interprétée dans la table et la symbologie basée sur le champ est correcte :
Code:
case when "seuil1" is not null and "proba90"<= "seuil1" then 1 else 2 end
(Je cherche évidemment à faire varier le champ testé à partir du contenu d'une autre table)
Merci
Renaud Mouche
Hors ligne
#2 Wed 06 March 2019 11:04
- dominique.lys
- Participant assidu
- Date d'inscription: 5 Oct 2006
- Messages: 473
- Site web
Re: QGIS 3.4: Fonction 'attribute()' et symbologie
Bonjour,
Dans la fonction attribute, le nom du champs doit être entre simple quote et non entre double quote.
Code:
case when "seuil1" is not null and attribute($currentfeature, 'proba90')<= "seuil1" then 1 else 2 end
Les doubles quotes permettent justement d’accéder à la valeur du champs pour l'entité courante, c'est un raccourci à la fonction attribute, donc admettons que porba90 vaut 50 pour la première entité, si vous laissez les doubles quotes c'est comme si vous écriviez attribute($currentfeature, 50), avec les simples quotes on passe une chaine de texte représentant le nom du champs.
Hors ligne
#3 Wed 06 March 2019 12:33
- Renaud
- Membre
- Lieu: Ploemeur (56)
- Date d'inscription: 9 Mar 2006
- Messages: 2315
Re: QGIS 3.4: Fonction 'attribute()' et symbologie
Merci,
Au temps pour moi, je me suis trompé en recopiant le code pour GeoRezo.
La formule était correcte dans QGIS.
Ce qui me rend perplexe c'est que QGIS puisse renvoyer une symbologie différente pour une même valeur de champ, en fonction de la méthode utilisé pour calculer le dit-champ.
Dans la copie ci-dessous, on voit bien que la colonne 'clastolerant' contient plusieurs valeurs, mais que toutes les mailles ont le symbole du 6
https://imagizer.imageshack.com/img922/9329/6IamFr.jpg
Renaud Mouche
Hors ligne
#4 Wed 06 March 2019 13:40
- dominique.lys
- Participant assidu
- Date d'inscription: 5 Oct 2006
- Messages: 473
- Site web
Re: QGIS 3.4: Fonction 'attribute()' et symbologie
ok je comprends mieux et j'arrive à reproduire le problème : j'ai fait deux champs virtuels avec des formules CASE WHEN similaires, l'une utilisant la fonction attribute l'autre non et affectivement dans la table les valeurs sont correctes alors qu'en faisant un symbologie par catégorie le champs utilisant la formule attribute ne fonctionne pas et l'autre fonctionne.
Je n'ai pas d'explication c'est clairement un bug, ce qui fonctionne par contre c'est de mettre la formule directement à la place du nom de champs dans les paramètres de symbologie par catégorie ou bien en découpant la formule dans des règles de symbologie.
Hors ligne
#5 Wed 06 March 2019 14:49
- Renaud
- Membre
- Lieu: Ploemeur (56)
- Date d'inscription: 9 Mar 2006
- Messages: 2315
Re: QGIS 3.4: Fonction 'attribute()' et symbologie
OK, donc c'est bien un bug de QGIS, je vais le signaler.
Et effectivement, en mettant la fonction directement dans la symbologie ça fonctionne, à priori sans impact significatif sur les temps d'affichage (la fonction réelle est plus lourde que celle postée).
Merci Dominique
Renaud Mouche
Hors ligne
#6 Thu 07 March 2019 09:33
- Renaud
- Membre
- Lieu: Ploemeur (56)
- Date d'inscription: 9 Mar 2006
- Messages: 2315
Re: QGIS 3.4: Fonction 'attribute()' et symbologie
L'affichage fonctionne correctement en affichage 2D, lorsqu'on met la formule dans la symbologie.
En revanche les objets apparaissent en noir dans ThreeJS
attribute() et get_feature() sont de super fonctions, mais il reste des choses à caler.
Impossible de sous-traiter le calcul des valeurs à Postgre sans donner de droit d'écriture.
Va falloir que je revois mes ambitions à la baisse.
Renaud Mouche
Hors ligne