#1 Fri 18 March 2016 11:38
- world citizen
- Participant occasionnel
- Date d'inscription: 29 Nov 2013
- Messages: 21
QGIS : Etiquetage avec code (pseudo sql, python)
Bonjour,
Je suis sous QGIS 2.14 et je veux étiqueter une couche (réseau linéaire) assez dense et complexe. Je veux créer une variable « étiquette » dont les propriétés (texte à afficher, taille, couleur…) en fonction des valeurs de certains champs. Et cela nécessite de faire des conditions (If ou Case) imbriquée. Bref je veux faire un code comme ce code vbscript sous arcgis.
Code:
Function FindLabel ( [champ1], [champ2] , [champ3] )
sLabel = [champ1]
variable = [champ2]&" Câble(s)"
if (not isnull(sLabel)) then
if (not isnull ([champ2])) then
if [champ2] > 0 then
sLabel = sLabel&" : "& variable
end if
end if
else
if (not isnull ([champ2])) then
if [champ2] > 0 then
sLabel = variable
end if
end if
end if
if [champ3]="valeur1" or [champ3]="valeur2" then
if (not isnull(sLabel)) then
sLabel ="<CLR red='255' green='0' blue='0'>" & sLabel & "</CLR>"
end if
end if
FindLabel = sLabel
End FunctionJ’ai fais une première approche avec le code pseudo sql
Code:
CASE WHEN "champ1" is not null then
case when "champ2" is not null then
case when "champ2">0 then concat( "champ1" ,':', "champ2" ,' élément(s)')
end
end
else
case when "champ2" is not null then
case when "champ2">0 then concat( "champ2",' élément(s)' )
end
end
endMais je ne trouve aucun moyen d’avoir plusieurs couleurs d’étiquette dans la même couche et aussi je ne peux pas créer de variable à utiliser tout au long du code. Est-il réellement possible de le faire sous QGIS ? Je vais être essayer avec l’éditeur de fonction (python) que je ne connais pas du tout. J'ai besoin d'exemple de code réalisé dans l'éditeur de fonction et aussi d'astuces
.
Merci d'avance
Hors ligne
#2 Fri 18 March 2016 12:57
- Lucien
- Participant actif
- Date d'inscription: 8 Mar 2016
- Messages: 104
Re: QGIS : Etiquetage avec code (pseudo sql, python)
Code:
CASE WHEN ("champ1" is not null and "champ2" is not null and "champ2">0)
THEN concat ( "champ1" ,':', "champ2" ,' élément(s)')
ELSE...
ENDPourquoi ne pas essayer de simplifier tous vos CASE WHEN imbriqué par des "and" ?
Hors ligne
#3 Fri 18 March 2016 14:48
- world citizen
- Participant occasionnel
- Date d'inscription: 29 Nov 2013
- Messages: 21
Re: QGIS : Etiquetage avec code (pseudo sql, python)
J'y avais aussi pensé, mais comme j'ai dit, c'est un réseau dense avec beaucoup de variantes. C'est faisable avec seulement des Case et And mais ça ferait énormément de combinaisons. le code dans l'exemple est simplifié c'est juste pour faire le message mais après ça devient assez alambiqué.
Hors ligne
#4 Fri 18 March 2016 15:25
- Lucien
- Participant actif
- Date d'inscription: 8 Mar 2016
- Messages: 104
Re: QGIS : Etiquetage avec code (pseudo sql, python)
Peut-être que cela peut t'aider
http://www.forumsig.org/showthread.php/ … x-couleurs
Hors ligne
#5 Fri 18 March 2016 15:47
- SANTANNA
- Moderateur
- Lieu: Angers
- Date d'inscription: 18 Jan 2008
- Messages: 4138
Re: QGIS : Etiquetage avec code (pseudo sql, python)
Bonjour,
En encore plus simple (vu que la requête est a priori longue, plus elle est factorisée, mieux c'est, me semble-t-il - pour autant que ça reste lisible et compréhensible rapidement), je pense que ceci (non testé) devrait faire l'affaire (je ne sais pas si c'est lisible et compréhensible par contre
)
Code:
Case when "champ2" > 0
Then concat(("champ1" || ':'), "champ2" ,' élément(s)')
ENDA priori, si champ2 > 0 alors champ 2 est non null. Ensuite, il faut savoir que:
- || renvoie null dès lors qu'une des variables (dans ce cas, ce serait champ1) est null
- alors que concat n'a pas ce souci, elle renvoie la concaténation des valeurs non null.
Par contre, je ne comprends pas du tout la question sur les taille et couleur. Chaque étiquette a une taille donnée (auquel cas il faudra appliquer une expression dans l'option taille par ex) ou est-ce à l'intérieur d'une étiquette que ça varie (pas encore dispo en natif dans QGIS)?
Hors ligne
#6 Mon 21 March 2016 10:26
- world citizen
- Participant occasionnel
- Date d'inscription: 29 Nov 2013
- Messages: 21
Re: QGIS : Etiquetage avec code (pseudo sql, python)
Ah oui! J'avais pas pensé au ||, il simplifie considérablement mon code. Merci Santana
. Je voulais effectivement faire varier la couleur de l'etiquette dans une même couche en fonction de la valeur d'un champ. J'y suis parvenu en faisant cette expression pour la couleur dans l'onglet style de texte
Code:
CASE WHEN "champ" =0 THEN '0,0,255' END
Hors ligne


