Exploiter les pièces jointes d'un signalement dans mviewer

Suite au webinaire du 18/06/2026, je mets ici un extrait de ma doc interne sur l’utilisation des pièces jointes d’un signalement dans une visionneuse carto mviewer (la première partie de la doc s’applique à n’importe quel autre outil dans lequel on veut exploiter les pièces jointes).

Créer la vue

Il faut créer la vue à la main, dans PGAdmin et pas dans l’interface d’admin de Django, qui ne permet pas de gérer les pièces-jointes.

CREATE VIEW test_attach_2 AS
  SELECT gf.feature_id AS id,
     gf.geom,
     gf.title,
     gf.description,
     gf.status,
     gf.feature_data ->> 'type'::text AS type_pav,
     gf.feature_data ->> 'adresse'::text AS adresse,
     json_agg(ROW(ga.attachment_file, ga.title)) AS url_attachment
    FROM geocontrib_feature gf
      LEFT JOIN geocontrib_attachment ga ON gf.feature_id = ga.feature_id AND gf.project_id =     ga.project_id
   WHERE gf.feature_type_id = 50 AND gf.project_id = 26
   GROUP BY gf.feature_id, gf.geom, gf.title, gf.description, gf.status, gf.feature_data, gf.feature_type_id;

La table geocontrib_feature contient les signalements
La table geocontrib_attachment contient les pièces-jointes
Le champ attachment_file contient le chemin vers la pièce-jointe

L’intérêt de cette requête c’est la création d’un champ json qui va aggréger les chemins vers toutes les pièces-jointes liées au signalement.

Ensuite il faut donner les droits (au moins de select) au user geocontrib (sinon la publication dans geoserver ne marche pas)

grant select on test_attach_2 to geocontrib;

Publier la vue dans geoserver

Si la vue a été créée correctement, et que le droit de select a été donné, alors le SRS de la couche est déduit automatiquement par geoserver (WGS 84 - EPSG 4326).

Ajouter la couche dans un mviewer

L’intérêt ici c’est d’exploiter le champ json dans un template. Pour faire ça, il faut d’abord déclarer ce champ dans la déclaration de la couche. Donc, dans le fichier xml du mviewer, il faut rajouter ce paramètre à la déclaration de la couche :

jsonfields="url_attachment"

url_attachment est le nom du champ json dans la vue.

Template mustache

Dans le template mustache, il faut parcourir les différentes valeurs contenues dans le champ json. Si les pièces jointes sont des images, on peut les mettre dans un tableau, par exemple :

<table>
     <thead>
     </thead>
     <tbody>
         {{#url_attachment}}
             <tr><td><img src="https://dev.geo2france.fr/geocontrib/media/{{f1}}" class="img img-responsive"/></td></tr>
         {{/url_attachment}}
     </tbody>
 </table>

Ce sont les deux balises {{#url_attachment}} et {{/url_attachment}} qui assurent que le champ json sera parcouru dans son intégralité.

Ressources