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.[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
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
[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/