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 Wed 11 July 2018 18:44

AHAquilex
Participant occasionnel
Date d'inscription: 10 Jul 2018
Messages: 17

QGIS Agrégation: majority et minimum sur des strings ?

Bonjour,

Je débute encore avec Qgis (je travaille sur Qgis 3.0) et lors de mes recherches je me heurte au problème suivant :

Contexte :

Je possède une couche de points possédant plusieurs champs :
* "ABF" : champ de chaînes de caractères, il s'agit de la date de l'observation
* "ACB" : champ d'entiers, il s'agit du diamètre du tuyau à l'endroit de l'observation
* "ACD" : champ de chaînes de caractères, il s'agit du matériau du tuyau à l'endroit de l'observation
* "ACN" : champ de chaînes de caractères, il s'agit de la date de pose du tuyau à l'endroit de l'observation
* "id_tronço" : champ de chaînes de caractères, il s'agit de l'identifiant du tuyau à l'endroit de l'observation

Je cherche à agréger ces points par tronçon/tuyau et date d'observation. J'utilise donc l'outil agrégation. Dans le cadre "grouper par expression" j'utilise l'expression suivante : array ("id_tronço","ABF")

Pour chacun des champs, je choisis comment les agréger :
ABF : first_value (la première date rencontrée)
ACB : majority (la valeur apparaissant le plus grand nombre de fois)
ACD : majority (la valeur apparaissant le plus grand nombre de fois)
ACN : minimum (la date la plus ancienne)
id_tronço : first_value (le premier id rencontré)

problème(s) rencontré(s) :

Dans un premier temps voilà la réponse de Qgis :

Traceback (most recent call last):
File "C:/PROGRA~1/QGIS3~1.0/apps/qgis/./python/pluginsprocessingalgsqgisAggregate.py", line 244, in processAlgorithm
attrs.append(self.evaluateExpression(fields_expr, expr_context))
File "C:/PROGRA~1/QGIS3~1.0/apps/qgis/./python/pluginsprocessingalgsqgisAggregate.py", line 275, in evaluateExpression
.format(expr.expression(), expr.evalErrorString()))
_core.QgsProcessingException: Evaluation error in expression "majority("ACD", ARRAY ("id_tronço","ABF")
)": Impossible de calculer l'aggrégat pour: ACD

Ma couche n'est donc pas créée. Je comprends alors que majority ne fonctionne pas sur des string.

Je mets concatenate à la place, en attendant de voir s'il n'y pas d'autres problèmes.

Ma colonne ACD se concatène parfaitement mais là c'est la colonne ACN qui reste vide. Je suppose que c'est parce que ACN est un champ de chaîne de caractères.

mes questions :

1) Comment puis-je faire pour que Qgis puisse trouver la valeur majoritaire de ACD pour chaque nouvelle entité ? Sachant que ACD est un champ de string

2) Comment faire pour que Qgis me retourne la valeur minimum de ACN (dates sous format string) ?

Merci d'avance à tous ceux qui auraient une/des solution(s) ou une/des piste(s)

Hors ligne

 

#2 Thu 12 July 2018 11:20

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

Re: QGIS Agrégation: majority et minimum sur des strings ?

Bonjour,

Ma couche n'est donc pas créée. Je comprends alors que majority ne fonctionne pas sur des string.


Effectivement, cette fonction ne semble être dispo que pour du numérique. Requête déposée à https://issues.qgis.org/issues/19402; on verra si c'est corrigé ou s'il y a une raison qui justifie cette limitation

1) Comment puis-je faire pour que Qgis puisse trouver la valeur majoritaire de ACD pour chaque nouvelle entité ? Sachant que ACD est un champ de string


Peut-être en créant un champ numérique intermédiaire où chaque type d'ACD correspondra à un nombre et sur lequel l'agrégat sera ensuite calculé.

2) Comment faire pour que Qgis me retourne la valeur minimum de ACN (dates sous format string) ?


minimum marche, il me semble.

Hors ligne

 

#3 Thu 12 July 2018 14:16

dominique.lys
Participant assidu
Date d'inscription: 5 Oct 2006
Messages: 473
Site web

Re: QGIS Agrégation: majority et minimum sur des strings ?

Merci beaucoup SANTANNA pour le rapport de bug ! Il me semble également que cette limitation est anormal.


Une solution en attendant pourrait être de passer par du SQL (mais de mémoire c'est un peu tordu à reproduire car la clause HAVING max(count(*)) ne fonctionne pas avec SQlite)

Hors ligne

 

#4 Fri 13 July 2018 16:39

AHAquilex
Participant occasionnel
Date d'inscription: 10 Jul 2018
Messages: 17

Re: QGIS Agrégation: majority et minimum sur des strings ?

Merci SANTANNA pour ta réponse, c'est dommage de devoir truander en passant par un nouveau champ, mais au moins ça me permettra de continuer.

Pour les dates, c'est peut-être à cause de valeurs nulles, je vérifie ça.

Merci aussi dominique, mais n'étant pas du tout familiarisé avec SQL, je préfère la petite manip précédente. Néanmoins si ça peut aider d'autres personnes, n'hésite pas à préciser la méthode !

Hors ligne

 

Pied de page des forums

Powered by FluxBB