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


	
voeux

#1 Tue 12 January 2021 11:24

Benoît595
Membre
Lieu: Douai
Date d'inscription: 17 Feb 2020
Messages: 19

QGIS 3.14: expression aggregate

bonjour,
Je suis sous Qgis 3.14, je cherche à utiliser l'expression ci dessous dans la calculatrice de champ pour remplir un champ texte. L'objectif est de remplir le champ d'une couche de polygone qui recouvre plusieurs parcelles avec la liste des parcelles situées à l'intérieur.

aggregate('couche_polygone','array_agg', "parcelle"), filter:=intersects(centroid(geometry(@parent)), $geometry))

si dans la calculatrice de champ j'ai bien un aperçu du résultat qui semble correct, l'exécution renvoie un résultat null

où est mon erreur?
merci d'avance

Hors ligne

 

#2 Tue 12 January 2021 13:38

JD
Membre du bureau
Date d'inscription: 8 Aug 2013
Messages: 553

Re: QGIS 3.14: expression aggregate

Bonjour,

quel type de champs avez-vous choisi de créer ?
Je pense que le mieux serait d'utiliser un champs string et d'utiliser la fonction array_to_string

Hors ligne

 

#3 Tue 12 January 2021 15:02

Benoît595
Membre
Lieu: Douai
Date d'inscription: 17 Feb 2020
Messages: 19

Re: QGIS 3.14: expression aggregate

merci pour l'aide, j'essayais de créer un champ texte et array_to_string manquait dans mon expression. Elle ne répond cependant pas complètement à mon objectif

Hors ligne

 

#4 Tue 12 January 2021 15:06

Benoît595
Membre
Lieu: Douai
Date d'inscription: 17 Feb 2020
Messages: 19

Re: QGIS 3.14: expression aggregate

j'avais inversé deux éléments, voici l'expression qui me convient:
array_to_string(aggregate('couche_polygone','array_agg', "parcelle", filter:=intersects(geometry(@parent), centroid($geometry))),' ; ','')

merci beaucoup

Hors ligne

 

#5 Tue 12 January 2021 15:13

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

Re: QGIS 3.14: expression aggregate

Bonjour,
La parenthèse après "parcelle" est une erreur de saisie?
array_agg renvoie un array donc vous ne pourrez pas le stocker dans un champ texte, sans conversion préalable, comme suggéré par JD.
Pourquoi pas juste 'concatenate' comme opérateur? Ça évite cette double "écriture" (vers array puis vers texte)

Hors ligne

 

#6 Tue 12 January 2021 16:40

JD
Membre du bureau
Date d'inscription: 8 Aug 2013
Messages: 553

Re: QGIS 3.14: expression aggregate

SANTANNA a écrit:

'concatenate'


C'est effectivement la solution optimale dans ce cas-ci.

Hors ligne

 

#7 Wed 13 January 2021 09:40

Benoît595
Membre
Lieu: Douai
Date d'inscription: 17 Feb 2020
Messages: 19

Re: QGIS 3.14: expression aggregate

merci pour votre aide.
Je ne vois pas comment utiliser concatenate ici

Hors ligne

 

#8 Wed 13 January 2021 10:34

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

Re: QGIS 3.14: expression aggregate

Bonjour,
En remplacement d'array_agg dans votre formule, à moins que je ne comprenne pas la question.
Il y a un exemple dans l'aide

Hors ligne

 

#9 Wed 13 January 2021 11:49

Benoît595
Membre
Lieu: Douai
Date d'inscription: 17 Feb 2020
Messages: 19

Re: QGIS 3.14: expression aggregate

Bonjour,
merci pour la précision.
L'expression est donc bien plus simple, fonctionne très bien et donne ceci :
aggregate('couche_polygone','concatenate', "parcelle", filter:=intersects(geometry(@parent), centroid($geometry)),concatenator:=' ; ')

Merci beaucoup pour l'aide!

Hors ligne

 

#10 Wed 13 January 2021 14:41

Benoît595
Membre
Lieu: Douai
Date d'inscription: 17 Feb 2020
Messages: 19

Re: QGIS 3.14: expression aggregate

cette expression fonctionne aussi pour l'intersection de 2 polygones :
aggregate('couche_polygone','concatenate', "parcelle", filter:=intersects(geometry(@parent), $geometry),concatenator:=' ; ')

C'est vraiment très pratique

Dernière modification par Benoît595 (Wed 13 January 2021 14:44)

Hors ligne

 

Pied de page des forums

Powered by FluxBB

Partagez  |