Édition - Éditer une couche à partir de l’interface web
Principe
Il est possible d’autoriser des utilisateurs à éditer des données spatiales et attributaires depuis Lizmap Web Client pour les couches PostgreSQL. Le plugin Lizmap vous permet d’ajouter une ou plusieurs couches et de choisir quelles actions seront permises dans l’interface web :
création d’élements
modification des attributs
modification de la géométrie
suppression d’éléments
Le formulaire web présenté à l’utilisateur pour renseigner la table attributaire prend en charge les Outils d’éditions proposés dans l’onglet Champs des propriétés de la couche vectorielle QGIS. On peut donc configurer une liste déroulante, masquer une colonne, la rendre non-éditable, utiliser une case à cocher, un champ texte, etc. Toute la configuration se fait à la souris, dans QGIS et dans l’extension Lizmap.
De plus, Lizmap Web Client détecte automatiquement le type de colonne (entier, réel, chaîne de caractère, etc.) et ajoute les vérifications et les contrôles nécessaires sur les champs.
Exemples
Une commune souhaite permettre aux citoyens de recenser les problèmes visibles sur la voirie: poubelles non ramassées, lampadaires en panne, épaves à enlever. L’administrateur du projet QGIS crée une couche dédiée à ce recueil de données et affiche à tous la donnée.
Un bureau d’étude souhaite permettre aux partenaires d’un projet de remonter des remarques sur des zones du projet. Il permet l’ajout de polygones dans une couche dédiée.
Pré-requis
Pour permettre l’édition de données dans Lizmap Web Client, il faut
Avoir une couche vectorielle stockée dans PostgreSQL.
La couche vectorielle ne doit pas comporter d’espace dans les noms de champs.
Configurez l’outil d’édition de la couche dans Personnaliser le formulaire d’édition pour plus d’informations sur la disposition, les widgets, les expressions, les contraintes dans un formulaire.
. Ce n’est pas obligatoire mais recommandé pour contrôler les données saisies par les utilisateurs. VoirLa couche doit publiée en WFS (voir WFS/OAPI) et la clé primaire doit aussi être publiée dans les Propriétés de la couche.
Bien que nous souhaitions éditer la couche, il n’est pas nécessaire d’utiliser les cases à cocher Mise à jour, Insérer et Supprimer dans la table des capacités WFS de l’onglet QGIS Server. Lizmap n’utilise pas WFS-T. Lizmap fera l’édition directement sur la source de données. La configuration se fait uniquement dans le panneau décrit plus bas.
Par conséquence :
Les informations d’identification ne doivent pas utiliser le système d’authentification fourni par QGIS pour une couche avec des capacités d’édition. Les informations d’identification doivent se trouver soit dans le fichier du projet QGS, soit dans le fichier du service PostgreSQL (recommandé, plus sûr car les informations d’identification ne sont pas stockées dans le projet QGIS) :
Note
Faites attention si votre couche contient des valeurs Z ou M, actuellement Lizmap les définira à « 0 » qui est la valeur par défaut à l’enregistrement dans la base de données.
Configurer l’outil
Voici le détail des étapes:
Si nécessaire, créer une couche dans votre base de données, du type de géométrie souhaité (point, ligne, polygone, etc.)
pensez à ajouter une clé primaire : c’est indispensable !
cette colonne de clé primaire doit être de type auto-incrémenté. Par exemple serial pour PostGresql.
pensez à ajouter un index spatial : c’est important pour les performances
créer autant de champs dont vous avez besoin pour les attributs : utiliser si possible des noms de champ simples !
Veuillez vous référer à la documentation QGIS pour voir comment créer une couche spatiale dans une base de données PostgreSQL.
Pour ajouter une couche avec l’édition:
Cliquer sur le bouton .
Sélectionner la couche dans la liste déroulante
- Cocher les actions que vous souhaitez activer parmi:
Créer
Éditer les attributs
Éditer la géométrie
Supprimer
Optionnel, vous pouvez ajouter une liste des groupes qui sont autorisés pour l’édition (séparés par des virgules).
- L’accrochage peut-être activé si vous sélectionner au moins une couche dans la liste.
La couche doit publiée en WFS (voir WFS/OAPI) et la clé primaire doit aussi être publiée dans les Propriétés de la couche.
- Si au moins une couche est sélectionnée ci-dessus, au moins une case à cocher doit être cochée:
Sommets
Segments
Intersections
Il est possible de définir la tolérance pour l’accrochage.
Pour éditer une couche dans la table, sélectionner la et cliquer sur le bouton ou alors double-cliquer sur la ligne.
Pour supprimer une couche de la table, cliquez sur celle-ci puis sur le bouton .
Pour monter ou descendre une couche, vous devez la sélectionner et cliquer ou . L’ordre changera dans Lizmap également.
Les alias des champs seront affichés si définis . Voir Ajouter un alias sur un champ.
Configurer le formulaire
Le formulaire dans Lizmap est hérité de Propriétés de la couche. Lire Personnaliser le formulaire d’édition.
Réutiliser les données des couches d’édition
Les couches que vous avez sélectionnées pour l’outil d’édition sont des « couches comme les autres », ce qui implique:
Les styles et les étiquettes de QGIS s’appliquent sur ces couches. On peut donc créer des styles et des étiquettes qui dépendent d’une valeur d’une des colonnes de la couche.
Si on souhaite proposer l’outil d’édition, mais ne pas permettre aux utilisateurs de voir les données de la couche en ligne ( et donc les ajouts des autres utilisateurs) : on peut simplement masquer la ou les couches d’édition en les mettant dans un répertoire hidden. Voir Masquer certaines couches
Les couches sont imprimables si elles ne sont pas masquées.
Les données sont enregistrées dans une couche du projet. L’administrateur peut donc récupérer ces données et les utiliser par la suite.
Note
Utilisation du cache: Si vous souhaitez utiliser le cache serveur ou client pour les couches d’édition, faites-le en toute connaissance de cause : les données ne seront pas visibles par les utilisateurs tant que le cache ne sera pas expiré. Nous conseillons de ne pas activer le cache pour les couches d’édition
Ajouter des images et des fichiers pour les attributs
Utiliser le dossier media/upload par rapport à un projet
Il est possible de téléverser vos fichiers, y compris les images, pour chaque entité, lors de l’édition en ligne ; pour cela, vous devez :
Configurer l’édition pour la couche, avec un ou plusieurs champs avec le Type d’outil Photo` ou Fichier. Par exemple, disons que le nom du champ est
photo
.Créez un dossier à la racine du fichier du projet QGIS :
media/
et un sous-dossiermedia/upload
(évidemment vous devez faire cela localement sur votre ordinateur et côté serveur).Donnez à l’utilisateur du serveur web (généralement www-data) les droits d’écriture sur le dossier upload, afin qu’il puisse créer des fichiers et des dossiers dans
media/upload
:chmod 775 -R media/upload && chown :www-data -R media/upload
Vérifiez le fichier
php.ini
pour voir si les variablespost_max_size
etupload_max_filesize
sont correctement définies (par défaut, PHP n’autorise que le téléchargement de fichiers que jusqu’à 2 Mo)
Lizmap va ensuite créer des dossiers pour stocker les données, en fonction du nom de la couche, du nom du champ, etc. Par exemple, un fichier sera stocké dans le dossier media/upload/PROJECT_NAME/LAYER_NAME/FIELD_NAME/FILE_NAME.EXT
et une image dans media/upload/environment/observations/species_picture/my_picture.png
.
Bien sûr vous pourrez afficher l’image (ou tout autre fichier) dans la popup, puisqu’elle sera stockée dans le répertoire media, Voir Utilisation dans les popups
Utilisez un dossier de destination spécifique
Vous pouvez remplacer le dossier de destination par défaut media/upload/PROJECT_NAME/LAYER_NAME/FIELD_NAME/FILE_NAME.EXT
en définissant manuellement le chemin où stocker les médias, par rapport au projet. Pour ce faire, vous devez utiliser le widget d’édition de champ Pièce jointe, et le configurer avec :
un Chemin par défaut écrit relativement au projet. Par exemple
../media/images/
si vous souhaitez stocker les fichiers de ce champ dans un dossier media situé à côté du dossier du projet. Vous pouvez également choisir de définir un chemin à l’intérieur du dossier media du projet. Par exemplemedia/my_target_folder/
.cochez la case Chemin relatif, avec l’option par défaut Relative to project path.
si le champ doit stocker une image, vous devez également cocher la case Integrated document viewer, avec le type Image
Cela permet de stocker les fichiers médias et les images envoyés dans un dossier centralisé, par exemple un répertoire media
au même niveau que les dossiers des dépôts de Lizmap :
media
images <– Pour stocker les images dans ce dossier, utilisez
../media/images/
.pdf
environnement
trees.qgs
trees.qgs.cfg
media
tree_pictures/ <– pour stocker les images dans ce dossier, utilisez :
media/tree_pictures/
”.
Utiliser un stockage à distance WebDAV
Il est possible de stocker vos fichiers sur un serveur distant qui supporte le protocole WebDAV (par exemple Nextcloud). Pour ce faire, vous devez :
Configurez le type d’outil Pièce jointe pour le champ choisi comme suit :
Dans le champ Type de stockage, sélectionnez l’option Stockage WebDAV.
Dans la section Stokage externe`, sur le champ Stocker l’URL, ajoutez une expression qui indique l’URL complète du chemin distant pour le fichier. La chaîne de l’expression doit :
commencer par l’URL du stockage à distance du dossier racine du serveur WebDAV
inclure ou non un sous-dossier de destination
se terminer par l’expression
file_name(@selected_file_path)
.
Mettez à jour la section Authentification avec votre
nom d'utilisateur
et votremot de passe
(optionnel, lisez ci-dessous à propos de l’authentification)
Par exemple, si vous voulez envoyer un fichier dans votre serveur WebDAV
https://webdav/dav
dans le sous-dossierpictures/2024/
, l’expression complète sera :'https://webdav/dav/pictures/2024/'||file_name(@selected_file_path)
Vous pouvez également envoyer un fichier directement dans le dossier racine, il faut modifier l’expression ci-dessus dans
'https://webdav/dav/'||file_name(@selected_file_path)
Astuce
Vous pouvez configurer différents champs sur la même couche ou dans différentes couches pour envoyer des fichiers vers votre stockage distant dans différents sous-dossiers.
Configurez votre installation de Lizmap pour qu’elle reconnaisse votre stockage WebDAV. Pour ce faire, dans votre
var/config/profiles.ini.php
, éditez la section[webdav:default]
:[webdav:default] baseUri=https://webdav/dav/ enabled=1 user=mywebdavuser password=mywebdavpassword
ou :
baseUri
est le dossier racine de votre serveur WebDAV. Il doit se terminer par/
et doit être le même que celui indiqué dans le Type d’outilenabled
a1
pour activer la configuration WebDAV, ou0
pour désactiveruser
, l’utilisateur d’authentification WebDAV pour ``baseUri`, identique à celui configuré dans la section Authentication du Stockage externepassword
, mot de passe d’authentification WebDAV pourbaseUri
, identique au précédent
Note
Les champs
user
etpassword
ne sont pas obligatoires, ils dépendent de la manière dont vous comptez gérer le stockage WebDAV.Note
La configuration de plusieurs serveurs WebDAV sur la même installation de Lizmap n’est pas supportée, vous ne pouvez donc configurer qu’un seul point de terminaison WebDAV par installation.
Avertissement
Pour obtenir des fichiers à partir d’un stockage distant, le
baseUri
sera exposé sur le client web.Avertissement
Si un utilisateur envoie deux fichiers avec le même nom, le premier fichier peut être écrasé. Ce comportement ne peut pas être contrôlé par Lizmap car il concerne la configuration et la structure du serveur WebDAV.
Astuce
Pour éviter que les fichiers ne soient écrasés, vous pouvez définir le Stocker l’URL en plaçant un
uuid
devant le nom du fichier, par exemple :'https://webdav/dav/pictures/2024/'||uuid('WithoutBraces')||'_'||file_name(@selected_file_path)
Après avoir effectué les deux étapes de configuration ci-dessus, vous pouvez :
Envoyer un nouveau fichier à partir du formulaire d’édition de la couche
supprimer un fichier existant dans le formulaire d’édition de couche
accéder au fichier via la table d’attributs (voir Table attributaire - Configurer la table attributaire et la sélection des entités)
accéder au fichier ou obtenir un aperçu du contenu du fichier via une popup (voir Utilisation dans les popups)
Avertissement
Malheureusement, cette fonctionnalité n’est pas encore compatible avec Lizmap Cloud.