#1 Mon 20 May 2024 15:54
- HockYan
- Participant occasionnel
- Date d'inscription: 21 Apr 2023
- Messages: 17
QGIS: Mise en page - Photos HTML
Bonjour à tous,
Je vous sollicite sur un problème que j'ai depuis plusieurs jours maintenant.
Je travaille sur un projet QGIS où j'utilise le mode Atlas pour parcourir des tronçons de cours d'eau (couche linéaire "Cours d'eau"). J'ai une autre couche "Observation" (couche ponctuelle) qui contient des observations liées à ces tronçons. Chaque observation a un identifiant commun avec les tronçons de cours d'eau (Champ "ID_Troncon"). Les observations contiennent un champ avec le chemin d'accès à une photo (champ "OBS_PHOTO1"). Les chemins d'accès aux photos sont relatifs au dossier où se trouve le projet QGIS. Par exemple : 'DCIM/nomdelaphoto.jpg'
Objectif :
Je souhaite afficher les photos correspondant aux observations pour chaque tronçon de cours d'eau directement dans la mise en page Atlas. Chaque tronçon peut avoir un nombre variable d'observations et donc de photos associées.
Je pense que la meilleure approche est d'ajouter un objet HTML dans ma mise en page. Pour cela, j'ai mis le code suivant sur l'objet HTML :
Code:
<img src="file:///[%@project_folder%]/[%aggregate('Observation', 'concatenate', "OBS_PHOTO1", "ID_Troncon"=attribute(@atlas_feature, 'ID_Troncon'))%]" width = "200"/>
Cela aggrège les valeurs du champ "OBS_PHOTO1"pour les entités de la couche 'Observation' qui ont le même identifiant de tronçon ("ID_Troncon") que l'entité actuellement affichée dans l'Atlas. Cependant, j'ai juste un carré bleu avec un point d'interrogation qui apparait.
Comment puis-je configurer correctement mon objet HTML afin d'afficher les photos des observations ponctuelles directement dans la mise en page de l'Atlas en fonction du tronçon de cours d'eau actuellement affiché ? Y a-t-il une meilleure approche ou des étapes spécifiques que je devrais suivre pour résoudre ce problème ?
Merci par avance de vos réponses, Yan
Hors ligne
#2 Mon 20 May 2024 16:32
- LPlante
- Participant occasionnel
- Date d'inscription: 17 Nov 2021
- Messages: 44
Re: QGIS: Mise en page - Photos HTML
Bonjour
Est ce que les variables [%@project_folder%] et [%aggregate...%] se trouvant à l'intérieur des "" de "file .... " width ne seraient pas considérés comme du text brut par hasard?
Le code couleur du code devrait donner la réponse.
La balise HTML d'image fonctionne bien mais ne retrouve pas le chemin marqué en dur et non la variable souhaitée (d'où le point d’interrogation)
Le concat va assembler les balises HTML en texte brut et les variables qgis.
Code:
concat('<img src="file:///',[%@project_folder%],'/',[%aggregate('Observation', 'concatenate', "OBS_PHOTO1", "ID_Troncon"=attribute(@atlas_feature, 'ID_Troncon'))%],'" width = "200"/>'
Dernière modification par LPlante (Mon 20 May 2024 16:37)
Hors ligne
#3 Fri 24 May 2024 11:04
- HockYan
- Participant occasionnel
- Date d'inscription: 21 Apr 2023
- Messages: 17
Re: QGIS: Mise en page - Photos HTML
Bonjour,
Les deux variables ne sont pas des textes brut. J'ai réalisé un test de ce code, en modifiant la variable [%aggregate%] par [%"OBS_PHOTO1"%], afin d'afficher les photos à l'aide de l'infobulle directement sur ma couche 'observation' et cela fonctionne.
En rajoutant la fonction 'concat(', j'ai toujours le carré bleu avec le point d'interrogation mais avec le mot concat(' juste devant (cf photo jointe).
Je dois oublier quelque chose dans mon code mais je ne sais quoi.
Yan
Hors ligne
#4 Fri 24 May 2024 12:17
- SANTANNA
- Moderateur
- Lieu: Angers
- Date d'inscription: 18 Jan 2008
- Messages: 3945
Re: QGIS: Mise en page - Photos HTML
Bonjour,
Il vous faut inverser la logique, à savoir, au lieu de concaténer les résultats de l'agrégat (et donc d'une liste des noms de photosdans votre référence HTML) , il vous faut agréger/concaténer les références/chemins renvoyant à chaque photo. Bon peut-être (!) pas très clair mais le code le sera peut-être plus (PS: j'ai pas testé avec la variable project_folder)
Code:
[%aggregate( 'Observation', 'concatenate', concat( '<img src="file:///', @project_folder, "OBS_PHOTO1", '" width = "500"/>' ), "ID_Troncon"=attribute(@atlas_feature, 'ID_Troncon'), '\n' )%]
En ligne
#5 Fri 24 May 2024 15:23
- HockYan
- Participant occasionnel
- Date d'inscription: 21 Apr 2023
- Messages: 17
Re: QGIS: Mise en page - Photos HTML
Bonjour,
Merci pour votre réponse SANTANA. En modifiant mon code avec le votre, j'ai un nombre de carré qui s'affichait en fonction de mon atlas courant. Cependant, j'avais toujours le problème des photos qui ne s'affichait pas (Carré bleu avec le point d'interrogation). Pour y remédier, j'ai rajouté '/' dans la fonction concat. Ce qui donne le code suivant :
Code:
[%aggregate('Observation', 'concatenate', concat( '<img src="file:///', @project_folder,'/', "OBS_PHOTO1", '" width = "200"/>' ), "ID_Troncon"=attribute(@atlas_feature, 'ID_Troncon'), '\n' )%]
Avec ce code j'ai les photos qui apparaissent !
Merci beaucoup pour votre aide !
Yan
Dernière modification par HockYan (Fri 24 May 2024 17:02)
Hors ligne
#6 Tue 20 August 2024 10:01
- HockYan
- Participant occasionnel
- Date d'inscription: 21 Apr 2023
- Messages: 17
Re: QGIS: Mise en page - Photos HTML
Bonjour,
Je me permet de relancer le sujet.
J'essaye maintenant de mettre un titre à chacune de mes photos à l'aide d'un ID déjà présent dans mon champ 'ID_OBS_V2' de ma couche point 'OBS_G1'.
Pour cela je fais le code suivant :
Code:
[%aggregate( 'OBS_G1_22ca1d6b_8ec0_4e67_8fa9_014da6655236', 'concatenate', concat( '<div style="margin-bottom: 20px;">', '<p style="text-align: center;">', "ID_OBS_V2", '</p>', '<img src="file:///', @project_folder,'/', "PHOTO1", '" width="300" style="display:block; margin:auto;"/>', '</div>' ), "ID_Troncon"=attribute(@atlas_feature, 'ID_Troncon'), '\n' ) %]
Le code fonctionne bien. Il me met bien les titres de mon ID pour chaque photo. Cependant, mes photos se mettent l'une en dessous de l'autre et dépasse ma page (cf. pdf : 2ème page). J'aimerais bien garder la mise en page de base (cf. pdf : 1ère page) mais avec les titres. Est-ce que cela est possible ?
Yan
Hors ligne