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 Mon 06 July 2020 13:10

Seiya70
Juste Inscrit !
Date d'inscription: 6 Jul 2020
Messages: 2

QGIS: fonction Case when

Bonjour,

Dans ma table attributaire d'un cadastre, j'ai calculé l'exposition a partir d'un MNT, celle ci s'exprime avec une valeur numérique allant de 0 à 360 qui correspond au Nord.

Mon but est de noté cette valeur par exemple si la valeur d'exposition est de 180, la parcelle aura une note de 10.
j'ai en tout 9 intervalles de notation.

toute fois quand je rentre ma formule aucun résultat n’apparaît, pourtant je n'est pas de message d'erreur
j'ai essayer plusieurs versions de cette formule et je ne sais plus quoi faire pour que sa marche.

https://www.casimages.com/i/200706095854146686.jpg.html

Hors ligne

 

#2 Mon 06 July 2020 13:11

Seiya70
Juste Inscrit !
Date d'inscription: 6 Jul 2020
Messages: 2

Re: QGIS: fonction Case when

Bonjour

Je cherche a créer un nouveau champ qui comportera une note suivant les valeur d'un des champ de ma table attributaire.

exemple : si mon champ de référence a une valeur comprise entre 0 et 25 alors le nouveau champ aura comme valeur 1

voila la Fonction que j'ai écrite :

CASE
    WHEN "orient_mea" IN ('0','25') THEN "note_orien" = 1
    WHEN "orient_mea" IN ('25','65') THEN "note_orien" = 2.5
    WHEN "orient_mea" IN ('65','115') THEN "note_orien" = 5
    WHEN "orient_mea" IN ('115','155') THEN "note_orien" = 7.5
    WHEN "orient_mea" IN ('155','205') THEN "note_orien" = 10
    WHEN "orient_mea" IN ('205','245') THEN "note_orien" = 7.5
    WHEN "orient_mea" IN ('245','295') THEN "note_orien" = 5
    WHEN "orient_mea" IN ('295','335') THEN "note_orien" = 2.5
    WHEN "orient_mea" IN ('335','360') THEN "note_orien" = 1
    ELSE "note_orien" = NULL
END

je n'est pas d’erreur d'afficher dans l'aperçu de résultat
mais quand je lance cette requête, le champ ne se remplis pas.
Que dois je faire ?

Hors ligne

 

#3 Mon 06 July 2020 13:32

GlaDal
Participant assidu
Date d'inscription: 30 Aug 2013
Messages: 1012

Re: QGIS: fonction Case when

J'aurais écrit :

CASE
    WHEN "orient_mea" IN ('0','25') THEN "note_orien" = 1
    WHEN "orient_mea" IN ('25','65') THEN "note_orien" = 2.5
    WHEN "orient_mea" IN ('65','115') THEN "note_orien" = 5
    WHEN "orient_mea" IN ('115','155') THEN "note_orien" = 7.5
    WHEN "orient_mea" IN ('155','205') THEN "note_orien" = 10
    WHEN "orient_mea" IN ('205','245') THEN "note_orien" = 7.5
    WHEN "orient_mea" IN ('245','295') THEN "note_orien" = 5
    WHEN "orient_mea" IN ('295','335') THEN "note_orien" = 2.5
    WHEN "orient_mea" IN ('335','360') THEN "note_orien" = 1
    ELSE  NULL
END

Vérifiez que vous n'avez pas fait de sélection dans votre table.

Hors ligne

 

#4 Mon 06 July 2020 14:01

EnilecT
Participant occasionnel
Date d'inscription: 11 Mar 2018
Messages: 24

Re: QGIS: fonction Case when

Bonjour,

"orient_mea" IN ('0','25') ne va être vrai que si la valeur correspond exactement à 0 ou à 25.

J'aurais plutôt utilisé :

Code:

CASE
WHEN "orient_mea" >= 0 AND "orient_mea" < 25 THEN "note_orien" = 1
WHEN "orient_mea" >= 25 AND "orient_mea" < 65 THEN "note_orien" = 2.5
...

Vérifiez aussi que votre champ "orient_mea" est bien un champ de type numérique et pas chaîne de caractère.

Hors ligne

 

#5 Mon 06 July 2020 16:59

dominique.lys
Participant assidu
Date d'inscription: 5 Oct 2006
Messages: 473
Site web

Re: QGIS: fonction Case when

La bonne syntaxe est

Code:

CASE
    WHEN "orient_mea" IN ('0','25') THEN 1
    ...
END

L'expression retourne une valeur, mais ce qui sera fait de cette valeur dépend du contexte (calcul d'un champs, définition d'une propriété de style ...). Il n'y a donc pas lieu d'indiquer le nom du champs à calculer

Hors ligne

 

#6 Mon 06 July 2020 17:07

carteq
Participant assidu
Date d'inscription: 8 Mar 2008
Messages: 829

Re: QGIS: fonction Case when

Au plus court :

Code:

CASE
    WHEN "orient_mea" <= 25 THEN 1
    WHEN "orient_mea" <= 65 THEN 2.5
(etc...)
    ELSE  NULL
END

Il ne sert à rien de tester les 2 limites de la classe : les entités testées à la première condition ne sont plus dans le lot pour la 2e, et ainsi de suite.

Dernière modification par carteq (Mon 06 July 2020 17:08)

Hors ligne

 

Pied de page des forums

Powered by FluxBB