Pages: 1
- Sujet précédent - QGIS 3.28.3: separation d'une chaine de caractere dans un champ - Sujet suivant
#1 Fri 07 April 2023 09:11
- Baptiste.Pignol
- Participant occasionnel
- Date d'inscription: 17 May 2021
- Messages: 16
QGIS 3.28.3: separation d'une chaine de caractere dans un champ
Bonjour, j'ai rencontré un petit problème.
Je veux avoir dans le champ "commune" de la couche 'Réseau' (polyligne) l'ensemble des attributs du champ "NOM" des enttités intersecté de la couche 'COMMUNE'. J'ai donc écrit dans la case valeur par défaut l'expression suivant :
Bonjour, j'ai rencontré un petit problème.
Je veux avoir dans le champ "commune" de la couche 'Réseau' (polyligne) l'ensemble des attributs du champ "NOM" des enttités intersecté de la couche 'COMMUNE'. J'ai donc écrit dans la case valeur par défaut l'expression suivant :
array_to_string(array(aggregate('COMMUNE','concatenate_unique', "NOM", filter:=intersects(geometry(@parent), $geometry))), ', ')
Le problème ce que la chaine de caractère en sortie ne sépare pas les nom des communes. Exemple : LanuéjolsSaint-Étienne-du-Valdonnez alors qu'il me faudrait le résultat Lanuéjols, Saint-Étienne-du-Valdonnez.
Pouvez vous me renseigner ?
Bonne journée à tous.
Hors ligne
#2 Fri 07 April 2023 10:00
- nicolas david
- Participant occasionnel
- Date d'inscription: 24 Feb 2014
- Messages: 28
Re: QGIS 3.28.3: separation d'une chaine de caractere dans un champ
Bonjour
Je pense que votre problème vient des paramètres sur la fonction aggregate avec l'option 'concatenante_unique'. Si on lit la documentation QGIS sur le sujet : https://docs.qgis.org/3.28/en/docs/user … #array-agg on voit qu'il faut alors préciser un séparateur/concatenator qui dans votre cas sera une virgule ','.
De fait, le résultat du aggregate est déjà ce que vous souhaitez et les fonctions array et array_to_string sont alors inutiles puisque le tableau en entrée de array_to_string ne contient déjà qu'un seul élement..
Code:
aggregate('COMMUNE', 'concatenate_unique', "NOM", filter:=intersects(geometry(@parent), $geometry) , concatenator:=', ')
Une autre solution serait de ne pas faire le concatenate_unique, et de d'abord récupérer les noms de communes dans un tableau (option array_agg) puis ensuite de ne garder que les éléments uniques (array_distinct) et finalement de convertir le tableau en chaîne de caractère avec le séparateur qui vous intéresse (array_to_string avec separateur ', ')
Code:
array_to_string(array_distinct(aggregate('COMMUNE','array_agg', "NOM", filter:=intersects(geometry(@parent), $geometry))), ', ')
Dernière modification par nicolas david (Tue 11 April 2023 15:52)
Hors ligne
#3 Fri 07 April 2023 10:19
- Baptiste.Pignol
- Participant occasionnel
- Date d'inscription: 17 May 2021
- Messages: 16
Re: QGIS 3.28.3: separation d'une chaine de caractere dans un champ
Merci pour cette réponse, ça marche parfaitement comme je veux. Je peux officiellement dire que vous êtes plus performant que Chat GPT .
Bonne journée et bon week-end
Hors ligne
Pages: 1
- Sujet précédent - QGIS 3.28.3: separation d'une chaine de caractere dans un champ - Sujet suivant