Pages: 1
- Sujet précédent - QGIS: Recuperer des valeurs d un parent d une couche enfant - Sujet suivant
#1 Wed 14 August 2024 13:44
- jfav
- Juste Inscrit !
- Date d'inscription: 22 Sep 2023
- Messages: 9
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: 427
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: 9
Re: QGIS: Recuperer des valeurs d un parent d une couche enfant
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: 427
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
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: 9
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.S. : super prénom
(Je confirme ahah)
Hors ligne
#6 Thu 15 August 2024 20:16
- SANTANNA
- Moderateur
- Lieu: Angers
- Date d'inscription: 18 Jan 2008
- Messages: 3945
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: 427
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
Pages: 1
- Sujet précédent - QGIS: Recuperer des valeurs d un parent d une couche enfant - Sujet suivant