Nous utilisons des cookies pour vous garantir la meilleure expérience sur notre site. Si vous continuez à utiliser ce dernier, nous considèrerons que vous acceptez l'utilisation des cookies. J'ai compris ! ou En savoir plus !.
banniere

Le portail francophone de la géomatique


Toujours pas inscrit ? Mot de passe oublié ?
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oublié ?

Annonce

GEODATA DAYS 2024

#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

 

Pied de page des forums

Powered by FluxBB