#1 Wed 28 July 2021 15:28
- Baptiste.Pignol
- Participant occasionnel
- Date d'inscription: 17 May 2021
- Messages: 16
QGIS: probl sur la fonction aggregate
Bonjour,
Je veux tout simplement automatiser un remplissage de de champ dans une couche en fonction d'une autre couche.
Pour faire simple j'ai une couche polyligne avec un champ "DIAMETRE" et j'ai une couche point avec un champ "DIAMETRE" aussi.
Le champ diamètre des polylignes est remplis avec des nombres et je veux donc que les points sur les polylignes prennent la même valeur dans le champs diamètre.
J'utilise donc la formule suivant dans la calculatrice de champ de ma couche point : aggregate('polyligne','concatenate_unique',"DIAMETRE", filter:=intersects(geometry(@parent), $geometry)).
Mais le résultat est le suivant : Erreur d'évaluation: Impossible de calculer l’agrégat pour : DIAMETRE.
Y a t'il quelqu'un pour m'aider.
Merci.
Hors ligne
#2 Wed 28 July 2021 19:06
- SANTANNA
- Moderateur
- Lieu: Angers
- Date d'inscription: 18 Jan 2008
- Messages: 3947
Re: QGIS: probl sur la fonction aggregate
Bonjour,
Il me semble que concatenate* ne prend que du texte. Essayez donc avec
Code:
aggregate('polyligne','concatenate_unique',to_string("DIAMETRE"), filter:=intersects(geometry(@parent), $geometry))
Hors ligne
#3 Thu 29 July 2021 08:49
- Baptiste.Pignol
- Participant occasionnel
- Date d'inscription: 17 May 2021
- Messages: 16
Re: QGIS: probl sur la fonction aggregate
Bonjour,
Il me semble que concatenate* ne prend que du texte. Essayez donc avecCode:
aggregate('polyligne','concatenate_unique',to_string("DIAMETRE"), filter:=intersects(geometry(@parent), $geometry))
Merci ça marche, sauf que certaines entités de sont pas complétées, et sa me le fait aussi avec un autre fonction qui rappelle l'identifiant de la polyligne :
aggregate('polyligne','concatenate_unique', "ID" +';', filter:=intersects(geometry(@parent), $geometry)).
Est-ce le 'intersects' qui prend pas les bonnes géométries ?
Hors ligne
#4 Thu 29 July 2021 08:59
- Baptiste.Pignol
- Participant occasionnel
- Date d'inscription: 17 May 2021
- Messages: 16
Re: QGIS: probl sur la fonction aggregate
Au final, j'ai trouvé mon problème, certains points sont considérés comme n'étant pas sur les lignes, il faut que je déplace les lignes, et les remette au même endroit.
Hors ligne
#5 Thu 29 July 2021 10:37
- Baptiste.Pignol
- Participant occasionnel
- Date d'inscription: 17 May 2021
- Messages: 16
Re: QGIS: probl sur la fonction aggregate
J'ai un autre petit problème, par moment les entités point sont sur les extrémités de plusieurs polyligne, j'ai donc plusieurs diamètre qui s'affiche.
Est t'il possible de rajouter une fonction dans la formule pour que le champ ne prenne que le plus petit diamètre disponible : exemple : '6325' ->> '25' ou '11032' ->> '32'
?
Pour rappel, la formule est : aggregate('polyligne','concatenate_unique',to_string("DIAMETRE"), filter:=intersects(geometry(@parent), $geometry))
Hors ligne
#6 Thu 29 July 2021 10:52
- SANTANNA
- Moderateur
- Lieu: Angers
- Date d'inscription: 18 Jan 2008
- Messages: 3947
Re: QGIS: probl sur la fonction aggregate
Bonjour,
Au final, j'ai trouvé mon problème, certains points sont considérés comme n'étant pas sur les lignes, il faut que je déplace les lignes, et les remette au même endroit.
Si vous fouillez un peu dans les discussions sur le forum, vous verrez que dans les intersections avec points les gens suggèrent généralement d'utiliser buffer ($geometry, unepetitedistancedetolerance)
Est t'il possible de rajouter une fonction dans la formule pour que le champ ne prenne que le plus petit diamètre disponible : exemple : '6325' ->> '25' ou '11032' ->> '32'
?
Voir les options de la fonction aggregate
Hors ligne
#7 Thu 29 July 2021 11:23
- Baptiste.Pignol
- Participant occasionnel
- Date d'inscription: 17 May 2021
- Messages: 16
Re: QGIS: probl sur la fonction aggregate
Bonjour,
Au final, j'ai trouvé mon problème, certains points sont considérés comme n'étant pas sur les lignes, il faut que je déplace les lignes, et les remette au même endroit.
Si vous fouillez un peu dans les discussions sur le forum, vous verrez que dans les intersections avec points les gens suggèrent généralement d'utiliser buffer ($geometry, unepetitedistancedetolerance)Est t'il possible de rajouter une fonction dans la formule pour que le champ ne prenne que le plus petit diamètre disponible : exemple : '6325' ->> '25' ou '11032' ->> '32'
?
Voir les options de la fonction aggregate
Merci, tout marche comme une montre, en remplaçant 'concatenate_unique' par 'min', impeccable !!!
Hors ligne