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

Printemps des cartes 2024

#1 Fri 28 June 2019 16:21

preliator
Participant assidu
Date d'inscription: 17 Nov 2018
Messages: 433

QGIS: Compter éléments de plusieurs champs

Bonjour à tous,

Je dispose d'un fichier de donnée représentant la présence/absence d'un type d'arbre sur plusieurs endroits.

Téléchargeable ici : https://drive.google.com/open?id=1dri_a … zLIELmNMcV


Sur QGIS, j'aimerais créer un champ "Score" de 0 à 2, qui fonctionnerait de la sorte :

- 0 : Si présence d'1 ou 2 arbres

- 1 : Si présence de 3 arbres

- 2 : Si présence de tout les arbres (4 * "Présence")

Je ne sais pas trop comment procéder ...

Merci à vous

Dernière modification par preliator (Mon 01 July 2019 16:58)

Hors ligne

 

#2 Mon 01 July 2019 14:51

preliator
Participant assidu
Date d'inscription: 17 Nov 2018
Messages: 433

Re: QGIS: Compter éléments de plusieurs champs

J'ai testé avec la méthode Case, when..., Mais ce n'est pas vraiment adapté à ma situation

Hors ligne

 

#3 Mon 01 July 2019 16:53

Sylther
Participant actif
Lieu: Mtp
Date d'inscription: 17 May 2016
Messages: 147

Re: QGIS: Compter éléments de plusieurs champs

Hello,

Pourquoi ne pas remplacer présence/absence par  1/0 puis faire un test sur la somme de arbre1 arbreN et affecter "score" en fonction ?

Hors ligne

 

#4 Mon 01 July 2019 16:57

preliator
Participant assidu
Date d'inscription: 17 Nov 2018
Messages: 433

Re: QGIS: Compter éléments de plusieurs champs

Merci pour ta réponse.

Je ne suis pas sur de la démarche à effectuer. Ce test se fait sur la table attributaire ?

Merci.

Hors ligne

 

#5 Mon 01 July 2019 18:37

SANTANNA
Moderateur
Lieu: Angers
Date d'inscription: 18 Jan 2008
Messages: 3811

Re: QGIS: Compter éléments de plusieurs champs

Bonjour,
En utilisant les fonctions array, ce devrait être possible (code non testé):

Code:

with_variable( nombre_arbres, -- ceci sert juste à condenser le code, je vous invite à lire sa doc
                      array_count( array( "champ1", "champ2","champ3","champ4" ), 'PRESENCE' ), -- renvoie le nombre d'arbres par ligne (sous réserve de bien écrire présence pareil partout)
                      CASE
                             WHEN nombre_arbres = 4 THEN 2
                             WHEN nombre_arbres = 3 THEN 1
                             ELSE 0
                      END)

Achtung: le code ci-dessus contient des erreurs. Voir plus bas pour le correctif.

Dernière modification par SANTANNA (Thu 04 July 2019 15:07)

Hors ligne

 

#6 Mon 01 July 2019 18:42

preliator
Participant assidu
Date d'inscription: 17 Nov 2018
Messages: 433

Re: QGIS: Compter éléments de plusieurs champs

Un grand merci à vous

Hors ligne

 

#7 Tue 02 July 2019 21:41

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

Re: QGIS: Compter éléments de plusieurs champs

J'ai testé avec la méthode Case, when..., Mais ce n'est pas vraiment adapté à ma situation


Pour cela, il aurait fallu rouler la procédure 5 fois :

1- WHEN [ARBRE 1] = "PRESENCE" THEN  1
2- WHEN [ARBRE 2] = "PRESENCE" THEN  [SCORE] + 1
3 - WHEN [ARBRE 3] = "PRESENCE"THEN  [SCORE] + 1
4 - WHEN [ARBRE 4] = "PRESENCE" THEN  [SCORE] + 1
5- WHEN [SCORE] = 0 OR [SCORE] = 1 OR [SCORE] = 2 THEN 0
WHEN [SCORE] = 3 THEN 1
WHEN [SCORE] = 4 THEN 2
END

Ou faire comme ceci (ce qui est tout aussi fastidieux) :
Update [EXERCICE] set [SCORE] =
CASE
WHEN [ARBRE 1] = "PRESENCE", [ARBRE 2] = "ABSENCE", [ARBRE 3] = "ABSENCE", [ARBRE 4] = "ABSENCE" THEN 0
WHEN [ARBRE 1] = "PRESENCE", [ARBRE 2] = "PRESENCE", [ARBRE 3] = "ABSENCE", [ARBRE 4] = "ABSENCE" THEN 0
[6 autres fois pour passer toutes les possibilités...]
END

Hors ligne

 

#8 Wed 03 July 2019 18:57

preliator
Participant assidu
Date d'inscription: 17 Nov 2018
Messages: 433

Re: QGIS: Compter éléments de plusieurs champs

Je rencontre un soucis avec la formule "With Variable"

Code:

with_variable('nombre_arbre', array_count(array( "ARBRE_1" ,  "ARBRE_2" ,  "ARBRE_3" ), 'PRESENCE'),

 CASE
                             WHEN 'nombre_arbre' = 4 THEN 4
                             WHEN 'nombre_arbre' = 3 THEN 3
                             WHEN 'nombre_arbre' = 2 THEN 2
                             WHEN 'nombre_arbre' = 1 THEN 1
END)

Cela me retourne que des NULL. J'ai pourtant cherché sur internet

Hors ligne

 

#9 Wed 03 July 2019 21:36

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

Re: QGIS: Compter éléments de plusieurs champs

Voici une partie de la solution. Ça compte le nombre d'occurences de "PRESENCE" par ligne de la table d'attributs :

array_length(array_filter(array( "ARBRE1" ,  "ARBRE2" ,  "ARBRE3", "ARBRE4" ), @element ='PRESENCE'))


J'ai enlevé les espaces dans les noms de champs et j'ai changé le type du champ "SCORE" pour un integer. Le résultat a été envoyé dans "SCORE".

On peut ensuite appliquer un CASE WHEN THEN END sur la colonne SCORE.

Dernière modification par carteq (Wed 03 July 2019 21:41)

Hors ligne

 

#10 Wed 03 July 2019 21:47

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

Re: QGIS: Compter éléments de plusieurs champs

Et une fois tout compris, ça donne :

Code:

with_variable( 'nombre_arbre', array_length(array_filter(array( "ARBRE1" ,  "ARBRE2" ,  "ARBRE3", "ARBRE4" ), @element ='PRESENCE')), 
CASE 

 WHEN @nombre_arbre = 1 THEN 0
WHEN @nombre_arbre = 2 THEN 0
WHEN @nombre_arbre= 3 THEN 1
WHEN @nombre_arbre= 4 THEN 2
                             
END
)

smile
p.s. QGIS 3.8

Dernière modification par carteq (Thu 04 July 2019 15:12)

Hors ligne

 

#11 Thu 04 July 2019 15:01

SANTANNA
Moderateur
Lieu: Angers
Date d'inscription: 18 Jan 2008
Messages: 3811

Re: QGIS: Compter éléments de plusieurs champs

Bonjour,

Je rencontre un soucis avec la formule "With Variable"


Effectivement, il me semble en recopiant le code que mes @ se sont perdus en chemin. Le code corrigé est donc le suivant.

Code:

with_variable( 'nombre_arbres', -- ceci sert juste à condenser le code, je vous invite à lire sa doc
                      array_count( array( "champ1", "champ2","champ3","champ4" ), 'PRESENCE' ), -- renvoie le nombre d'arbres par ligne (sous réserve de bien écrire présence pareil partout)
                      CASE
                             WHEN @nombre_arbres = 4 THEN 2
                             WHEN @nombre_arbres = 3 THEN 1
                             ELSE 0
                      END)

Par contre, dans ce que vous semblez tester, le résultat n'est plus conforme à ce que vous demandiez au départ.
PS: Attention, dans vos données, il y a aussi 'PRESENCE ' (avec espace à la fin)

Hors ligne

 

#12 Thu 04 July 2019 18:41

preliator
Participant assidu
Date d'inscription: 17 Nov 2018
Messages: 433

Re: QGIS: Compter éléments de plusieurs champs

Merci à vous tous smile je viens d'apprendre une nouvelle formule

Hors ligne

 

Pied de page des forums

Powered by FluxBB