#1 Thu 15 May 2014 09:31
- fabclermont975
- Participant occasionnel
- Date d'inscription: 7 Apr 2014
- Messages: 22
QGIS : calculatrice de champs
Bonjour à tous,
débutant dans le SIG je suis en train d'explorer les fonctionnalités de QGIS, j'ai une question dont je n'arrive pas à trouver la solution :
Mon idée est de comparer 2 dates :
dans un champ je renseigne une échéance (par exemple date de fin de contrat le 15.15.2015)
dans un autre champ je renseigne la date du jour ( avec la formule $now, qui soit dit en passant ne se met pas à jour d'elle même quand on ouvre le fichier le lendemain...)
et enfin dans le troisième, je me sers de la calculatrice de champs pour y appliquer une formule afin de connaitre le nombre de mois qui me sépare de l'échéance.
en fait la formule fonctionne " day(age("champ1","champ2")) " mais si je mets à jour un champs (exemple le champs date du jour) la correction sur le nombre de mois ne se fait pas comme s'il n'y avait pas de mise à jour automatique (ni manuelle d'ailleurs j'ai cherché)
si quelqu'un a une idée, merci de m'éclairer.
Hors ligne
#2 Thu 15 May 2014 10:42
- Leyan
- Participant assidu
- Date d'inscription: 14 Oct 2013
- Messages: 160
Re: QGIS : calculatrice de champs
Non, les formules de la calculatrice de champs ne sont pas dynamiques, que ce soit $now ou la comparaison entre deux champs. Elles servent juste à calculer une valeur mais ne sont pas sauvegardées dans le champs, seule la valeur reste.
Quel est le but de la manœuvre? Si c'est pour afficher différemment selon l'échéance, le mieux est de mettre la formule directement dans la symbologie "ensemble de règles", dans ce cas elle sera dynamique. Dans les versions récentes de QGis, les étiquettes permettent aussi d'afficher des formules directement.
Si il faut absolument que le résultat soit dans un champs dynamiquement mis à jour, il faut regarder du côté de la base de données comment faire.
Hors ligne
#3 Fri 16 May 2014 11:54
- fabclermont975
- Participant occasionnel
- Date d'inscription: 7 Apr 2014
- Messages: 22
Re: QGIS : calculatrice de champs
Merci Leyan pour ta réponse claire, je vais tenter une autre approche. Merci.
Hors ligne
#4 Mon 19 May 2014 17:06
- fabclermont975
- Participant occasionnel
- Date d'inscription: 7 Apr 2014
- Messages: 22
Re: QGIS : calculatrice de champs
Bonjour Leyan,
toujours dans mon problème avec le calculatrice de champs j'ai essayé d'automatiser la commande en passant par l'ensemble de règle dans "style" comme tu me l'as conseillé.
J'ai noté : CASE WHEN month(age( $now , "Echéance" ))>2 THEN color_rgb(255,127,0) END, mais ça n'a pas l'air de fonctionner.
j'explique mon problème :
j'ai une date d'échéance, j'aimerais que QGis m'affiche en vert les polygones dont l'échéance est supérieure à 2 ans, en orange ceux compris entre 2 ans et aujourd'hui et en rouge ceux dont l'échéance est passée. la variable est la date du jour : QGIS peut-il gérer cette variable ?
Hors ligne
#5 Mon 19 May 2014 18:23
- SANTANNA
- Moderateur
- Lieu: Angers
- Date d'inscription: 18 Jan 2008
- Messages: 3895
Re: QGIS : calculatrice de champs
Bonjour,
Code:
CASE WHEN month(age( $now , "Echéance" ))>2 THEN color_rgb(255,127,0) END
Ton code propose une seule condition alors que ton exemple semble devoir gérer trois situations. Soit dit en passant, t'utilises la fonction month au lieu de year (mais cela n'est pas la raison de l'échec d'exécution). Le code que tu saisis n'est pas à sa bonne place. Là, t'es en train de lui dire qu'en certaines conditions (>2mois), tu prends comme valeur la couleur orange. Mais une couleur sur quoi? Orange n'a pas de sens pour lui en cet endroit. Car ce qui est attendu dans ce champ, c'est la valeur de discrétisation de ton champ soit la première partie du code. C'est cette première partie du code (<0, entre 0 et 2, >2) qu'il va falloir représenter et donc filtrer.
Ensemble de règles basiquement, fonctionne comme les autres types de symbologies. De la même manière qu'en mode catégorisé par ex, tu prends un champ et récupères ces différentes valeurs pour les représenter, il va te falloir lui indiquer (dans Rule) différentes valeurs à trouver (<0, entre 0 et 2, >2) avec ta formule de calcul et pour chaque ligne, comme dans catégorisé, tu mets en forme le symbole. La puissance d'Ensemble de règles réside en ce que tu peux imbriquer des fonctions, des conditions, et donc utiliser des valeurs de discrétisation qui n'apparaissent pas directement dans ta table attributaire...
Pour faire simple, il te faudra double-clic sur la ligne, rajouter dans le champ filtre year(age( $now , "Echéance" ))>2 et paramétrer le symbole de rectangle en bas, valider, cliquer sur le + en bas pour ajouter une nouvelle ligne de règle, avec comme filtre year(age( $now , "Echéance" ))>0 et year(age( $now , "Echéance" ))<=2, tu symbolises puis rajoutes ta troisième ligne avec son filtre et symbolises.
Il y a différentes manières d'écrire, certains pourraient proposer d'imbriquer mais je pense que celle-ci est la plus simple et une fois qu'elle te donne ce que tu veux et que tu en comprends le principe, tu peux partir à l'aventure pour découvrir toutes les subtilités et surement, optimiser ce qui est ci-dessus.
Désolé pour le roman.... Si pas clair, demande, quelqu'un complétera.... Bon courage
PS: l'option CASE WHEN est également utilisable, mais ce serait, dans le cadre d'un symbole unique, à appliquer directement sur la variable "couleur" de fond via "source de définition des propriétés. C'est fun, ça le représente mais la légende ne suit pas donc pas fun...
Hors ligne