Constructeur d'expressions
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.
À 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)
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
- fenêtre de saisie
- liste des fonctions
- aide sur la fonction choisie
- 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.
""
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.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
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.
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 ?
autres conditions : regexp_match
Si vous êtes un as en regex pas besoin de vous expliquer, si vous voulez le devenir :
les expressions régulières
(bonne chance).
Comme la définition du site précédent est très bien, je me permet de reprendre : Les expressions régulières sont utilisées dans quasiment tous les langages. C'est un outil très puissant qui permet de vérifier si le contenu d'une variable a la forme de ce que l'on attend. Par exemple si on récupère un numéro de téléphone, on s'attend à ce que la variable soit composée de nombres et d'espaces (ou de tiret) mais rien de plus. Les expressions régulières permettent non seulement de vous avertir d'un caractère non désiré mais également de supprimer/modifier tous ceux qui ne sont pas désirables.
C'est très puissant quand on maîtrise 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
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.