Table attributaire - Configurer la table attributaire et la sélection des entités

Principe

Lizmap est conçu pour montrer des données spatiales sur la carte principale, et vous pouvez proposer aux utilisateurs de voir les données d’un objet avec la fonctionnalité « popup » (une petite popup contenant les données des objets est affichée quand un utilisateur clique sur la carte). Voir Popup

Parfois, cela ne suffit pas, et en tant qu’éditeur de carte, vous souhaitez que l’utilisateur puisse voir toutes les données d’une couche spécifique, comme vous pouvez le faire dans QGIS en ouvrant la table attributaire.

Note

L’activation de la table d’attributs d’une couche entraîne également l’activation de :

  • outils de sélection graphique

  • exportation des entités sous forme de fichier

Pré-requis

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.

Configurer l’outil

Au niveau de la couche

../../_images/interface-add-attribute-table-layer.jpg

Dans l’onglet Outils de la boîte de dialogue de l’extension Lizmap, il y a un groupe nommé « Table attributaire » qui contient un tableau et des champs de formulaire permettant l’ajout et la suppression de couches vectorielles.

Pour ajouter une couche à cet outil :

  1. Cliquer sur le bouton add_layer_svg.

  2. Couche : Choisissez une des couches vectorielles (spatiale ou non). Cela peut être n’importe quel format de couche vectorielle : GeoJSON, Shapefile, PostGIS, CSV, etc.

  3. Identifiant unique : L’outil table attributaire nécessite de définir chaque objet comme unique. Nous vous recommandons fortement d’ajouter un champ avec des valeurs uniques si votre couche n’en possède pas encore. En général le champ avec valeur unique contient des entiers. Si la couche ne possède pas ce type de champs, vous pouvez aisément le créer avec la Calculatrice de champ. Choisissez le champ qui convient avec la liste déroulante.

  4. Champs à masquer : Il existe 2 façons de masquer des champs dans la table attributaire publiée.

    • Dans la boîte de dialogue Propriétés de la couche de la couche vectorielle dans QGIS, dans l’onglet Champs, vous pouvez décocher la case de la colonne WFS pour les champs à ne pas publier. Ceci signifie que ces champs ne seront pas publiés via le protocol WFS. C’est la façon la plus simple et la plus sûre de restreindre la publication de certains champs (pour interdire l’accès à des données sensibles par exemple)

    • Vous pouvez utiliser l’option Champs à masquer pour masquer les champs données dans la table attributaire. Les champs masqués seront invisibles pour l’utilisateur final, mais toujours disponible pour Lizmap Web Cleint. Vous devez utiliser cette option pour masquer le champ avec des valeurs uniques. Si vous utilisez la première méthode (décocher la colonne WFS), l’identifiant unique ne sera pas utilisable par Lizmap, et certaines fonctionnalités de la table attributaire ne fonctionneront pas correctement.

  5. Laissez la coche Table pivot décoché. C’est pour la relation.

  6. Ne pas cocher la case Masquer dans les tables filles. C’est pour la relation.

  7. Laissez la coche Masquer la couche dans la liste décoché. C’est pour la relation.

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

Au niveau du projet

../../_images/interface-attribute-table.jpg

Ordre des champs

Lizmap réutilise l’ordre des champs définit dans la table attributaire.

  1. Ouvrir la table attributaire.

  2. Clic-droit sur une entête de colonne.

  3. Cliquer sur Organiser les colonnes…

  4. Glisser/déposer les colonnes.

../../_images/interface-organize-attributes.jpg

Lors de la définition d’un ordre personnalisé, la case à cocher Custom configuration devrait être automatiquement modifiée.

Télécharger les données

En ajoutant la couche dans l’outil de table attributaire, cela activera également la capacité de téléchargement sur cette couche. Par défaut, seuls GeoJSON et GML sont disponibles. En installant l’extension WfsOutputExtension sur QGIS Serveur, vous pouvez ajouter plus de formats tels que Geopackage, ODS, CSV, XLSX…. Lire https://github.com/3liz/qgis-wfsOutputExtension

../../_images/user-guide-wfs-output-extension.jpg

Utiliser les relations

Dans QGIS, vous pouvez configurer des relations entre des couches, dans la boîte de dialogue Propriétés du projet. Si vous publiez dans Lizmap plus d’une couche dans l’outil table attributaire, et si des couches ont une relation, les utilisateurs finaux pourront voir les tables enfants en-dessous leur table parent, et un clic sur une ligne dans la table parent déclenchera le filtre sur le contenu des tables enfants.

Par exemple, vous pourriez avoir une couche avec des villes, et une couche enfant avec des bâtiments publics. Cliquer sur une ville dans la table attributaire déclenchera le rafraichissement du contenu de la table enfant des bâtiments publics présentant uniquement ceux de la ville cliquée.

Vous pouvez utiliser des relations « plusieurs-à-plusieurs » (N:M) dans QGIS depuis la version 2.14 mais à ce jour Lizmap ne les utilisent pas automatiquement. Vous devez aussi définir les relations dans l’extension Lizmap. Dans de nombreux cas, les relations N:M sont très pratiques. Par exemple, vous pouvez avoir les trois couches vectorielles suivantes dans votre projet :

  • Lignes de tramway : cette couche nommée « Lignes » contient une objet par ligne de tram, avec un champ à identifiant unique nommé tram_id

  • Arrêts de tramway : cette couche nommée « Arrêts » contient une objet par arrêt de tram, avec un champ à identifiant unique nommé stop_id

  • Table de correspondance entre les lignes et les arrêts : cette couche nommée « Pivot » est une table pivot entre les lignes et les arrêts de tram, puisque un arrêt peut être pour plus d’une ligne, et une ligne dessert plusieurs arrêts. Elle contient les champs suivant : tram_id, stop_id et order ce dernier définissant l’ordre de l’arrêt sur la ligne.

Vous pouvez définir 2 relations dans les propriétés du projet QGIS : une entre Lignes et Pivot utilisant le champ tram_id, et une entre Arrêts et Pivot utilisant le champ stop_id.

Dans Lizmap, nous avons ajouté un moyen simple de configurer une relation N:M. Vous pouvez simplement

  • Créer les deux relation décrites ci-dessus dans la boite de dialogue des propriétés du projet QGIS, onglet Relations

  • Ajoutez les couches Lignes et Arrêts dans l’outil de table attributaire

  • Ajoutez la couche Pivot dans l’outil de table attributaire avec l’option Table pivot ? cochée

Lizmap Web Client gérera ensuite la relation comme une relation N:M

  • La table pivot sera affichée sous chaque table attributaire parent et affichera uniquement les enfants correspondant.

  • La fonction de filtre basée sur l’attribut des couches déclenchera les filtres en cascade sur le pivot et les autres parents. Par exemple, si l’utilisateur utilise le filtre pour n’afficher qu’une ligne de tramway, Lizmap n’affichera aussi que les arrêts correspondants sur la carte et dans la table attributaire pour Arrêts.

Astuces

Si l’un des champs contient un chemin d’accès à un média, tel que media/a_folder/my_image.jpg, Lizmap affichera un lien permettant à l’utilisateur d’ouvrir le fichier média (image, vidéo, PDF, etc.) dans un nouvel onglet du navigateur.

Si le média pointe vers une image (un fichier JPG ou PNG), vous pouvez ajouter une nouvelle colonne montrant un petit aperçu de l’image source en ajoutant un nouveau champ virtuel dans votre couche vectorielle, avec cette expression. Dans l’exemple ci-dessous, le champ contenant le chemin du média est media_path et le champ virtuel est nommé thumbnail :

concat(
   '<img data-src="',
   "media_path" ,
   '" src="/themes/default/css/img/logo_footer.png" style="height:60px;"
   onload="this.src = `${lizUrls.media}?repository=${lizUrls.params.repository}&project=${lizUrls.params.project}&path=${this.getAttribute(\'data-src\')}`;">'
)

Le résultat sera le suivant :

../../_images/interface-attribute-table-show-image-preview.jpg