Pasq.fr

Parce-qu'il y a forcément du sens à tout ce bordel !

Constructeur d'expressions

Rédigé par Alain Aucun commentaire
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.

 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.

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.

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 ! 

 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

clic-droit sur un champs clic-droit sur un champs

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

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.


Écrire un commentaire

Quelle est la deuxième lettre du mot hbowlp ?

Fil RSS des commentaires de cet article