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

Rencontres QGIS 2025

L'appel à participation est ouvert jusqu'au 19 janvier 2025!

#1 Mon 21 August 2023 09:25

NMonteix
Participant occasionnel
Date d'inscription: 7 Jan 2020
Messages: 11

QGIS: Groupes de points (cluster) en fonction d'attributs

Bonjour
J'ai une série de points avec entre autres un attribut correspondant à leur valeur numérique, et un attribut catégoriel.
Je voudrais les regrouper sur la base de leur distance ET de la valeur de l'attribut catégoriel.
La symbologie "groupes de points" ne fonctionne pas, il n'est pas possible de discriminer selon l'attribut catégoriel (ou je n'ai pas trouvé comment...).
La seule chose qui fonctionne, un peu lourde, est de créer une couche virtuelle par valeur catégorielle, ce qui est très long vu le nombre de catégories.
J'ai essayé d'utiliser aggregate (formule insérée dans la taille du symbole simple, de manière à ce que non seulement le groupe de points existe, mais qu'il ait aussi une taille variant en fonction de la somme de la valeur des points composant le groupe):

Code:

aggregate( @layer_name,'sum',"Nombre",filter:="Nature"=$geometry AND intersects(buffer($geometry,10),geometry(@parent))))

A priori, c'est le filtre

Code:

"Nature"=$geometry

qui bloque, le résultat est nul.
Merci par avance pour toute idée
Nicolas

Dernière modification par NMonteix (Mon 21 August 2023 09:32)

Hors ligne

 

#2 Mon 21 August 2023 09:43

Robin B
Participant occasionnel
Lieu: Montpellier
Date d'inscription: 31 Jul 2023
Messages: 14

Re: QGIS: Groupes de points (cluster) en fonction d'attributs

Bonjour,

J'ai du mal à identifier ce que vous voulez filtrer avec le code "Nature" = $geometry. Pouvez-vous m'éclairer ?

Hors ligne

 

#3 Mon 21 August 2023 09:52

NMonteix
Participant occasionnel
Date d'inscription: 7 Jan 2020
Messages: 11

Re: QGIS: Groupes de points (cluster) en fonction d'attributs

Les catégories à filtrer sont dans le champ "Nature". Je rédigeais ce filtre en le comprenant comme "filtrer les points ayant la même valeur dans Nature que le point actuel".
Le problème vient certainement de là...

Dernière modification par NMonteix (Mon 21 August 2023 09:55)

Hors ligne

 

#4 Mon 21 August 2023 10:07

Robin B
Participant occasionnel
Lieu: Montpellier
Date d'inscription: 31 Jul 2023
Messages: 14

Re: QGIS: Groupes de points (cluster) en fonction d'attributs

Vous pouvez essayer de remplacer "Nature" = $geometry par

Code:

"Nature" = attribute( @parent , 'Nature')

Hors ligne

 

#5 Mon 21 August 2023 10:26

NMonteix
Participant occasionnel
Date d'inscription: 7 Jan 2020
Messages: 11

Re: QGIS: Groupes de points (cluster) en fonction d'attributs

Fantastique !
Merci beaucoup

Hors ligne

 

#6 Mon 21 August 2023 14:43

NMonteix
Participant occasionnel
Date d'inscription: 7 Jan 2020
Messages: 11

Re: QGIS: Groupes de points (cluster) en fonction d'attributs

En fait, si cela va mieux, le fond du problème n'est pas résolu: lorsque deux points sont suffisamment proches pour pouvoir être agrégés, ils sont doublés, chacun avec la même valeur (deux points de valeur 2 dans la même catégorie sont représentés comme 2 points de valeur 4).

Hors ligne

 

#7 Thu 24 August 2023 11:15

NMonteix
Participant occasionnel
Date d'inscription: 7 Jan 2020
Messages: 11

Re: QGIS: Groupes de points (cluster) en fonction d'attributs

Solution, trouvée notamment en passant par là: https://gis.stackexchange.com/questions … 218#465218
But
Regrouper des points sur critères de distance (ici une distance tampon de 5m à partir d’un point) et sur un critère de valeur d’attribut. Chacun des points a un attribut de catégorie et un attribut numérique correspondant à sa valeur propre. Cette valeur propre sera donc additionnée pour les points situés dans la zone tampon de 5 m et rendue visible par le diamètre du cercle utilisé comme représentation. [Pour mémoire, le rendu visuel de valeurs différentes par des cercles de surfaces croissantes répond à la formule n*Value^0.5 (la racine carrée [^0.5] de la valeur [Value] multipliée par le diamètre du cercle pour une valeur de 1 [n, ici 2 mm])

Symbologie
Choisir ‘catégorisé’ et catégoriser en fonction des valeurs de « Category »
Pour chaque valeur de catégorie, on utilisera comme symbole un ‘générateur de géométrie’ répondant à l’expression suivante :

Code:

centroid(aggregate(
layer:=@layer_name,
aggregate:='collect',
expression:=@geometry,
filter:="Category" =attribute(@parent,'Category') 
AND intersects(buffer(@geometry,5), buffer(geometry(@parent),5))))

Ce qui suit correspond à des interventions sur le symbole du niveau inférieur au générateur de géométrie, qui comportera un symbole de police et un symbole simple.

Symbole de police
(expression à insérer dans la fenêtre d’expression de « Caractère(s) »)

Code:

aggregate(
layer:=@layer_name,
aggregate:='sum',
expression:="Value",
filter:="Category" =attribute(@parent,'Category') 
AND intersects(buffer(@geometry,5), buffer(geometry(@parent),5)))

Taille du symbole simple (expression à insérer dans la fenêtre d’expression de « Taille »)

Code:

CASE
When "Category"='A'
Then 2*aggregate(    
layer:=@layer_name,
aggregate:='sum',
expression:="Value",
filter:="Category" =attribute(@parent,'Category')
AND intersects(buffer(@geometry,5), buffer(geometry(@parent),5)))^0.5
END

Et voilà. S’il ne fallait pas donner une valeur à partir d’un attribut, et que chaque point ait une valeur de 1, on remplacerait ‘sum’ par ‘count dans les deux dernières expressions

Dernière modification par NMonteix (Thu 24 August 2023 14:46)

Hors ligne

 

Pied de page des forums

Powered by FluxBB