Message posté par : J.Brgn
----------------------------------------
-----------------
MathieuR écrit :
Bonjour,
Dans l'idée, il faut rapatrier au sein d'une couche toutes les colonnes
correspondant aux variables avec le niveau
Pour cela, si plusieurs couches, utiliser union
Soit une couche ayant cette forme :
-----------------
Code :
id | V1 | V2 | V3
1 | 1 | 3 | 3
2 | 3 | 1 | 1
-----------------
Par la suite, pour calculer les statistiques de comptage, alors on peut utiliser
l'expression suivante qui donne quel niveau a la majorité parmi les trois variables du
tableau :
-----------------
Code :
with_variable('counts',
array(
array_count(array("V1", "V2","V3"), 1),
array_count(array("V1", "V2","V3"), 2),
array_count(array("V1", "V2","V3"), 3)
),
array_find(@counts, array_max(@counts)) + 1
)
-----------------
Soit, en résultat :
-----------------
Code :
id | V1 | V2 | V3 | majorite
1 | 1 | 3 | 3 | 3
2 | 3 | 1 | 1 | 1
-----------------
Histoire de décomposer :
-----------------
Code :
array("V1", "V2","V3")
-----------------
crée un tableau contenant les niveaux pour chacune des trois colonnes
-----------------
Code :
array_count(array("V1", "V2","V3"), 1)
-----------------
compte le nombre de cellules contenant la valeur de niveau 1 pour chacune des lignes
Ainsi, soit un tableau contenant ces valeurs :
-----------------
Code :
[1,0,2]
-----------------
-----------------
Code :
array_find(@counts, array_max(@counts))->2
-----------------
retourne l'index dans le tableau de comptage qui contient la valeur de comptage
maximale, soit ici l'index 2 pour la valeur maximale de 2 (l'index va de 0 à 2)
Pour avoir un index plus réaliste :
-----------------
Code :
array_find(@counts, array_max(@counts)) + 1
-----------------
-----------------
Bonjour,
J'ai bien compris la logique du raisonnement que vous m'avez expliqué MathieuR,
mais quelques points me bloquent :
- dans votre formule, je remplace bien les V1, V2, V3 par le nom de mes champs ?
- à quoi correspondentexactement les 1, 2 et 3 à la fin de ce code ?
array_count(array("V1", "V2","V3"), 1),
array_count(array("V1", "V2","V3"), 2),
array_count(array("V1", "V2","V3"), 3)
- y a t-il autre chose à rajouter dans cette formule (signe =, des espaces à supprimer) ?
Quand je copie-colle votre formule dans la calculatrice de champ, en changeant les V1, V2,
V3 par le nom de mes champs, cela me met que la formule est incorrecte.
Je sais bien que mes questions peuvent paraître simplistes, mais c'est une des
première fois que suis amené à utiliser ce type de formule.
Un grand merci d'avance.
Bonne journée,
----------------------------------------
Le message est situé
https://georezo.net/forum/viewtopic.php?pid=323517#p323517
Pour y répondre : qgis_fr(a)ml.georezo.net ou reply de votre messagerie
Pour vous désabonner connectez-vous sur le forum puis Profil / Abonnement
--
Association GeoRezo - le portail géomatique
https://georezo.net