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

Printemps des cartes 2024

#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 wink.

Bonne journée et bon week-end

Hors ligne

 

Pied de page des forums

Powered by FluxBB