É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 Propriétés de la couche ‣ Formulaire d’attributs. Ce n’est pas obligatoire mais recommandé pour contrôler les données saisies par les utilisateurs. Voir Personnaliser le formulaire d’édition pour plus d’informations sur la disposition, les widgets, les expressions, les contraintes dans un formulaire.

  • 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.

  • 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 :

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.

../../_images/interface-add-edition-layer.jpg
  • Pour ajouter une couche avec l’édition:

    1. Cliquer sur le bouton add_layer_svg.

    2. Sélectionner la couche dans la liste déroulante

    3. Cocher les actions que vous souhaitez activer parmi:
      • Créer

      • Éditer les attributs

      • Éditer la géométrie

      • Supprimer

    4. Optionnel, vous pouvez ajouter une liste des groupes qui sont autorisés pour l’édition (séparés par des virgules).

    5. 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.

    6. Si au moins une couche est sélectionnée ci-dessus, au moins une case à cocher doit être cochée:
      • Sommets

      • Segments

      • Intersections

    7. 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 edit_layer_svg ou alors double-cliquer sur la ligne.

  • Pour supprimer une couche de la table, cliquez sur celle-ci puis sur le bouton remove_layer_svg.

  • Pour monter ou descendre une couche, vous devez la sélectionner et cliquer down_layer_svg ou up_layer_svg. 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-dossier media/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 variables post_max_size et upload_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 exemple media/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 :

    1. Dans le champ Type de stockage, sélectionnez l’option Stockage WebDAV.

    2. 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).

    1. Mettez à jour la section Authentification avec votre nom d'utilisateur et votre mot de passe (optionnel, lisez ci-dessous à propos de l’authentification)

    ../../_images/webdav-configure-attachment-widget.jpg

    Par exemple, si vous voulez envoyer un fichier dans votre serveur WebDAV https://webdav/dav dans le sous-dossier pictures/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’outil

    • enabled a 1 pour activer la configuration WebDAV, ou 0 pour désactiver

    • user, l’utilisateur d’authentification WebDAV pour ``baseUri`, identique à celui configuré dans la section Authentication du Stockage externe

    • password, mot de passe d’authentification WebDAV pour baseUri, identique au précédent

    Note

    Les champs user et password 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 :

Avertissement

Malheureusement, cette fonctionnalité n’est pas encore compatible avec Lizmap Cloud.