Constructeur d'expressions

in expressions •  7 years ago 


On ne peut se passer d'une méthode pour se mettre en quête de la vérité des choses. René DESCARTES

Après le premier article sur les requêtes, je trouvais classe de débuter ce 2eme chapitre par une citation de mon pote René. On va continuer notre quête des requêtes présentes dans QGIS.

LE CONSTRUCTEUR D'EXPRESSIONS


Dans QGIS, vous allez trouver à plusieurs reprises et à plusieurs endroits, le même constructeur d'expression. Dans la sélection par expression, bien sûr, dans la calculatrice de champs, dans les étiquettes, dans la table d'attributs...

Ne vous y trompez pas, il s'agit bien de requête sur les attributs (les données), et non de requêtes spatiales, nous les aborderons une prochaine fois. En fait, j'appelle requête de sélection/modification lorsque la requête ne porte que sur une couche. Les requêtes spatiales vont intervenir en croisant 2 ou plus couches.

selection
À gauche, la sélection par expression, à droite, la calculatrice de champs (pour ajouter ou modifier des champs)

fenêtre de saisie d'expressions (qgis2.10)
fenêtre de saisie d'expressions (qgis2.10)

Pour écrire de belles requêtes, il faut déjà connaitre tous ce que l'on peut faire avec QGIS, bon on peut tout faire me diront certains, mais commençons par utiliser les outils à disposition.

La fenêtre

  1. fenêtre de saisie
  2. liste des fonctions
  3. aide sur la fonction choisie
  4. l'éditeur de fonction : qui permet de créer ces propres fonctions en python

1. fenêtre de saisie

Rien de compliquer ici, elle permet de saisir les expressions, les formules et les données. En haut de cette case, vous trouvez des accès rapides à la saisie. Les mêmes se trouvent dans les opérateurs de la case 2.

[wpfmb type='warning'] les "" sont utilisés pour le nom des champs, et on utilise ' ' pour les variables (c'est à dire les valeurs saisies) texte et rien pour les variables en chiffres ('1' est le caractère 1, 1 est le chiffre 1). Prenez l'habitude de les utiliser même si Qgis vous propose parfois de faire sans. [/wpfmb]

2. liste des fonctions


Je ne vais pas aborder toutes les fonctions dans le détails, 1 parce-que c'est fastidieux, 2 parce-qu'il y a le mode d'emploi de QGIS http://docs.qgis.org/2.8/fr/docs/user_manual/working_with_vector/expression.html.

Je vais donc aborder les essentielles ou pas évidentes à mettre en œuvre

2.1 Opérateurs


Voir l'article précédent.

On va ajouter le signe ^ signe de puissance 2^2=2²=4 ; 4^4=4⁴=256...

le signe modulo %, c'est à dire le reste de la division (en rouge dans l'image), comme en CM1 quand vous ne connaissiez pas la virgule. 19 % 6 = 1

modulo en rouge
modulo en rouge

Et le très important signe de concaténation, || qui permet de souder 2 chaînes de caractères.

2 || 2 → 22

'bonjour' || ', ' || 'monsieur' || (2*2) → bonjour, monsieur4 ; notez la présence des parenthèses pour le calcul.

Parlons aussi de IS permet de vérifier que la valeur des 2 saisies est la même, pour les chiffres, on appele cela =

4 IS 4 → 4 = 4 va retourner 1 car la comparaison est vraie

'quatre' IS NULL → 'quatre' = rien va retourner 0 car la comparaison est fausse.

'quatre' IS 4 va retourner 0, des lettres ce n'est pas des chiffres...

Avec NOT : 'quatre' IS NOT NULL va retourner 1 (vrai) car quatre ce n'est pas rien mais ce n'est pas 4 non plus.

[wpfmb type='warning'] attention NULL n'est pas 0, NULL c'est rien et zéro ce n'est pas rien, c'est zéro ! Dans un champ, si le champ est vide alors "champs" IS NULL est vrai (retourne 1) mais si le champs est à zéro "champs" IS NULL va retourner 0, car le champ est rempli d'un zero ! [/wpfmb]

2.2 conditions


Là, je fais une entorse, les conditions pour faire de la sélection, j'avoue que je ne vois pas l’intérêt, c'est plus pour la calculatrice de champs. Bon j'explique quand même

CASE et CASE ELSE : c'est la même chose. Cela permet d’enchainer les vérifications de conditions, de tester plusieurs questions. En français, on pourrait traduire ça en :

Dans les cas suivants(CASE)
Quand(WHEN) truc est égal à machin alors(THEN) fais truc
Quand(WHEN) bidule est plus grand que truc alors(THEN) met la valeur de machin à 0
(…)
Sinon (ELSE), pour tous les autres cas, fais un autre truc.
fini (END)

ELSE sert donc quand on veut modifier un truc dans tous les autres cas non listés dans un WHEN.

Dans le cadre d'une sélection, cela peut donner ceci pour sélectionner les départements 29 et 06

CASE
WHEN "CODE_DEPT" = '29' THEN '1'
WHEN "CODE_DEPT" = '06' THEN '1'
END

Sous entendu
CASE
WHEN "CODE_DEPT" = '29' THEN '1'
WHEN "CODE_DEPT" = '06' THEN '1'
ELSE '0'
END

Mais, il est à mon avis plus simple de faire "CODE_DEPT" = '29' OR "CODE_DEPT" = '06'

Dans le cas d'un calcul de champs, imaginons que je veux mettre le champs 123 à FIN pour le département 29 et ALP pour le département 06 et je ne change rien pour les autres départements

CASE
WHEN "CODE_DEPT" = '29' THEN "123" ='FIN'
WHEN "CODE_DEPT" = '06' THEN "123" = 'ALP'
END

Si maintenant, je veux la même chose et mettre HOP dans tous les autres départements

CASE
WHEN "CODE_DEPT" = '29' THEN "123" ='FIN'
WHEN "CODE_DEPT" = '06' THEN "123" = 'ALP'
ELSE "123" = 'HOP'
END

Ok ?

regexp_match, si vous êtes un as en regexp pas besoin de vous expliquer, si vous voulez le devenir : https://docs.python.org/3.5/library/re.html (bonne chance). C'est très puissant quand on maitrise les expressions régulières, mais j'avoue que sans pense bête à coté de soi, il faut pratiquer tous les jours pour s'en sortir.

2.3 Champs et valeurs


Liste des champs de la couche sélectionnées.
clic-droit sur un champs
clic-droit sur un champs

[wpfmb] ASTUCE, avec un clic-droit sur le champs, vous pouvez obtenir les 10 valeurs les plus représentées dans le champs [/wpfmb]

2.4 Maths


Je vais juste aller au plus utiles tous les jours, pour les autres, ce sont des maths.
ROUND, CEIL, FLOOR

ce sont 3 fonctions d'arrondi. ROUND( nombre, nombre de décimales) si vous ne mettez pas le deuxième critére, l'arrondi se fait au plus proche. FLOOR arrondi à l'unité inférieure, CEIL arrondi à l'unité supérieure.

ROUND (3.14,1) → 3.1 ; FLOOR(3.14) → 3 ; CEIL (3.14) → 4

2.5 Les autres fonctions


Je peux, à la demande générale, revenir sur d'autres fonctions si besoin.

Parlons quand même de TRIM qui est très utile pour nettoyer des saisies de tabulation ou d'espace en début ou en fin de phrase.

Le plus intéressant et la partie RECENT, qui stocke vos 20 dernières requêtes et donc évites de retaper ou de recréer toutes les requêtes fabuleuses que vous avez faîtes.

3 LA FENÊTRE D'AIDE


C'est là que vous allez trouver toutes les aides que je n'ai pas décrites plus haut.

4. L'EDITEUR DE FONCTIONS


Alors là, autant vous dire que l'on plaisante plus, si les fonctions offertes par Qgis ne vous suffisent pas, vous pouvez créer vos propres fonctions. Grâce à Python, vous écrivez votre propre code. Cela vous tente, j'en ai pas eu besoin jusqu'à présent, mais je ne bosse pas à la NASA, donc un jour peut-être.


C'est bien beau tout ça, mais je n'ai pas vraiment aborder d'exemples concrets. Et bien passons à un autre article...

 

 


Posted from my blog with SteemPress : http://pasq.fr/constructeur-expression/

Authors get paid when people like you upvote their post.
If you enjoyed what you read here, create your account today and start earning FREE STEEM!