#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 )
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 je viens d'apprendre une nouvelle formule
Hors ligne