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 Mon 21 February 2022 17:04

sylvainSIG
Participant assidu
Lieu: Moissac
Date d'inscription: 29 Nov 2018
Messages: 263

QGIS: Aggregate functions

Bonjour,

Je cherche à créer un atlas par commune des routes. Pour chaque planche j'aimerais que la donnée de la longueur totale se mette à jour automatiquement. j'ai découvert la fonction aggregate, mais je ne sais pas trop l'utiliser.

Pour le moment j'ai ça, avec deux couches, une avec les voies l'autre avec les contours administratifs.

Code:

"insee" || ' - ' || "nom" || ' - ' ||  '\n'  || aggregate(layer:='voie', aggregate:='sum', expression:="calcul_longueur", filter:="calcul_insee")

"insee' fait référence à l'insee situé sur la couche commune,
"calcul_insee" fait référence à l'insee situé sur la couche des voies,

En l'état, l'expression me renvoie la somme de toutes les voies, toute commune confondu. Moi je veux juste la somme de l'entité de l'atlas.

Merci pour votre aide, Sylvain

Hors ligne

 

#2 Tue 22 February 2022 09:12

shirosaki
Participant actif
Lieu: Lyon
Date d'inscription: 30 Mar 2018
Messages: 124

Re: QGIS: Aggregate functions

Bonjour, dans votre formule le code est incomplet.

Vous avez mis un filtre, mais pas de condition, du coup par défaut, la formule va filtrer les valeurs ou "calcul_insee" est nul.
Il faut donc rajouter une condition du type "calcul_insee" = '07xxx'
Sauf que vous ne pouvez pas appeler un champ de la couche 'parente' dans la formule aggregate comme cela, il faut utiliser une formule du genre

Code:

attribute(@parent,'insee')

votre formule doit donc ressembler à cela :

Code:

"insee" || ' - ' || "nom" || ' - ' ||  '\n'  || aggregate(layer:='voie', aggregate:='sum', expression:="calcul_longueur", filter:="calcul_insee" = attribute(@parent,'insee') )

Paul QUESNOT

Hors ligne

 

#3 Wed 23 February 2022 08:54

sylvainSIG
Participant assidu
Lieu: Moissac
Date d'inscription: 29 Nov 2018
Messages: 263

Re: QGIS: Aggregate functions

Merci :-)

Cette formule redescend un nombre décimal avec un nombre interminable de chiffres après la virgule. Comment faire pour réduire ?
aggregate(layer:='voie', aggregate:='sum', expression:="calcul_longueur", filter:="calcul_insee" = attribute(@parent,'insee')

J'ai essayé to_int(29.4554), le résultat est 22 (?). Y a t il une fonction de troncature ?

Merci

Sylvain

Hors ligne

 

#4 Wed 23 February 2022 09:37

Elise
Participant assidu
Lieu: Argentat (19)
Date d'inscription: 16 Oct 2005
Messages: 497
Site web

Re: QGIS: Aggregate functions

Round (laformulearalonge, 1)

non ?


Géoscope
  11 rue de l'Hospice - 19400 Argentat
  Tél. : 09 60 47 51 16

Hors ligne

 

#5 Wed 23 February 2022 09:42

sylvainSIG
Participant assidu
Lieu: Moissac
Date d'inscription: 29 Nov 2018
Messages: 263

Re: QGIS: Aggregate functions

La formule à rallonge renvoie 29.1466666, et le round la-dessus renvoie 22.... Un bug de qgis ? une mauvaise utilisation de round ?

Hors ligne

 

#6 Wed 23 February 2022 10:04

mfangain
Participant actif
Date d'inscription: 12 Jun 2012
Messages: 88

Re: QGIS: Aggregate functions

Peut-être que le résultat de "aggregate" n'est pas un nombre mais du texte?
Essayer peut-être avec quelquechose du genre : round(to_real(formulearallonge),0)?

Une autre solution serait d'arrondir directement le champ au départ avant aggrégation, même ça peut peut-être arriver à un résultat légèrement différent au final. avec ...,expression:=round("calcul_longueur",0),...

Hors ligne

 

#7 Wed 23 February 2022 14:40

sylvainSIG
Participant assidu
Lieu: Moissac
Date d'inscription: 29 Nov 2018
Messages: 263

Re: QGIS: Aggregate functions

Pour finir, je suis resté en mètre plutôt qu'en kilomètre et ça marche

Merci

Sylvain

Hors ligne

 

#8 Wed 23 February 2022 21:55

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

Re: QGIS: Aggregate functions

Hello,

La formule à rallonge renvoie 29.1466666, et le round la-dessus renvoie 22


Fausse alerte ou toujours avéré? Version de QGIS? Je viens d'essayer sur QGIS 3.23 round(29.1466666) et ça me renvoie bien 29.

Hors ligne

 

Pied de page des forums

Powered by FluxBB