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

GEODATA DAYS 2024

#1 Wed 14 August 2024 13:44

jfav
Juste Inscrit !
Date d'inscription: 22 Sep 2023
Messages: 8

QGIS: Recuperer des valeurs d un parent d une couche enfant

Bonjour!

Mon projet contient plusieurs couches d'une base de donnée Postgres SQL créée par mes soins. Les relations entre celles-ci sont configurées dans Postgres SQL et sont bien interprétée par QGIS:
https://imagizer.imageshack.com/img922/7275/PP2UKs.png

Maintenant, pour Qfield au moyen de Qfiel sync, je souhaite faire en sorte que le nom de ma photo se nomme automatiquement avec des attributs provenant des couches parents. Prenons un exemple de mon cas. J'ai les trois tables suivantes:

Batiment, Facade et Constat_facade_photo. Constat_facade_photo est l'enfant de Facade. Facade et l'enfant de Batiment.
De Batiment, je souhaite connaitre l'attribut 'numero_eca et de Facade, je souhaite connaitre l'attribut id_facade.
Pour faire cela, j'ai effectué la requête fonctionnelle suivante (qui "crée" les relations dans la requete):

Code:

'DCIM/'

||

attribute(  get_feature('batiment_cb8a62f0_3d1b_4d2a_bda7_12133954c951', 'id_batiment',
attribute(  get_feature( 'facade_21fcbce6_7618_4a27_89e9_0443bde2077b' , 'id_facade' ,    "facade_id_facade"    ),  'id_facade'    )), 'numero_eca' )  

||

'_'

||

attribute(  get_feature( 'facade_21fcbce6_7618_4a27_89e9_0443bde2077b' , 'id_facade' ,    "facade_id_facade"    ),  'id_facade'    )  

||
'_'

|| format_date(now(),'yyyyMMdd_hhmmss') || '.{extension}'

Cette solution fonctionne mais je ne la trouve pas du tout élégante, à la place j'aimerai utilisé la fonction relation_aggregate. Seulement voilà, j'ai effectué le test suivant:

Code:

relation_aggregate(
  'constat_facade_photo_facade_id_facade_fkey', -- nom de la relation
  'concatenate', -- méthode d'agrégation, ici on utilise concatenate pour récupérer une valeur textuelle
  "id_facade" -- champ de la table parent (facade) à récupérer
)

Mais QGIS m'informe de l'erreur suivante:
https://imagizer.imageshack.com/img924/294/eiIyRP.png
Des idées sur l'erreur? Et en général sur la façon de récupérer des attributs d'un parent dans une expression?

Merci d'avance!
Cordialement,
Jérémie

Hors ligne

 

#2 Wed 14 August 2024 21:08

p.jeremie
Participant assidu
Lieu: Valence
Date d'inscription: 10 Sep 2017
Messages: 415

Re: QGIS: Recuperer des valeurs d un parent d une couche enfant

Bonjour,

J'ai essayé de reproduire le contexte dans lequel tu es, j'ai la même problématique concernant le fait que la relation n'est pas trouvée. Je ne comprends pas pourquoi pour le moment.

Concernant le fait de récupérer l'id_facade depuis ta couche contstat, je ne comprends pas très bien, c'est la même valeur que ton champ facade_id_facade, qui sert à faire le lien dans la relation.

Hors ligne

 

#3 Wed 14 August 2024 22:04

jfav
Juste Inscrit !
Date d'inscription: 22 Sep 2023
Messages: 8

Re: QGIS: Recuperer des valeurs d un parent d une couche enfant

p.jeremie a écrit:

Concernant le fait de récupérer l'id_facade depuis ta couche contstat, je ne comprends pas très bien, c'est la même valeur que ton champ facade_id_facade, qui sert à faire le lien dans la relation.


Tout à fait, je comprends ton questionnement. J'ai mis ça dans l'exemple par expliquer facilement mon cas. Pour de vrai, je souhaite extraire du parent le champ 'orientation' et du grand-parent (j'ai pas souvent vu ce terme mais je pense qu'on se comprend ^^) je souhaite extraire le champ 'numero_eca'. Cela équivaudrait (si je ne me trompe pas) à imbriquer deux fonctions relations_aggregate afin d'avoir accès au grand-parent. Cependant, avant cela, je souhaite déjà réussir avec mon exemple simple cité auparavent.

Hors ligne

 

#4 Wed 14 August 2024 22:42

p.jeremie
Participant assidu
Lieu: Valence
Date d'inscription: 10 Sep 2017
Messages: 415

Re: QGIS: Recuperer des valeurs d un parent d une couche enfant

J'ai compris pourquoi ça ne fonctionne pas.
La fonction relation_aggregate(), comme indiqué dans l'aide :

Renvoie une valeur agrégée, calculée à partir de toutes les entités enfants correspondantes dans la couche en relation.


Donc elle ne fonctionnera que sur la couche parent.

Hors dans ton cas, tu pars de la couche enfant.

La façon dont tu as fait avec l'imbrication des deux attribute/get_feature fonctionne bien.
Personnellement je resterais sur ce fonctionnement, d'autant que je ne vois pas d'autre possibilité.

P.S. : super prénom wink

Dernière modification par p.jeremie (Wed 14 August 2024 22:45)

Hors ligne

 

#5 Thu 15 August 2024 07:15

jfav
Juste Inscrit !
Date d'inscription: 22 Sep 2023
Messages: 8

Re: QGIS: Recuperer des valeurs d un parent d une couche enfant

Effectivement, j'avais bien lu cela dans la description de la fonction, mais je ne sais pas trop pourquoi, je me suis dis que ça devait être possible dans l'entre sens ^^' Problème réglé du coup.
Je m'interroge quand même sur le fait qu'il n'existe pas de fonction inverse, afin de partir de l'enfant pour récupérer des données du parent. Cette opération me semble basique et régulièrement utile, et passer par le attribute/get_feature me semble, bien que fonctionnel, peu élégant et efficace.

Dans tous les cas, merci pour l'éclaircissement!

p.jeremie a écrit:

P.S. : super prénom wink


(Je confirme ahah)

Hors ligne

 

#6 Thu 15 August 2024 20:16

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

Re: QGIS: Recuperer des valeurs d un parent d une couche enfant

Hello,
Pas d'environnement QGIS pour tester mais est-ce que la fonction current_parent_value ou la variable @current_parent_feature peuvent etre des pistes?

Hors ligne

 

#7 Thu 15 August 2024 21:17

p.jeremie
Participant assidu
Lieu: Valence
Date d'inscription: 10 Sep 2017
Messages: 415

Re: QGIS: Recuperer des valeurs d un parent d une couche enfant

J'ai demandé sur le canal Telegram "QGIS Community" s'il y avait d'autres façons de récupérer les valeurs de champs d'un parent qu'avec attribute(get_feature(parent_layer, id...)...). J'ai eu une réponse qui m'indiquait que c'était la bonne façon de faire.

Concernant @current_parent_feature ou current_parent_value(), j'ai l'impression que ce sont de fonctions/variables récentes ?
@current_parent_feature semble exister en 3.32 mais ne me donne pas le résultat escompté.
attribute(@current_parent_feature,'id') renvoie NULL
attributes(@current_parent_feature) renvoie la liste des attributs de l'entité enfant...

Cependant j'ai trouvé des discussion récentes qui en parle, avec des problèmes rencontrés notamment dans Qfield : https://github.com/opengisch/QField/discussions/5327

https://github.com/qgis/QGIS/issues/57957

Hors ligne

 

Pied de page des forums

Powered by FluxBB