Le plugin Qgis RDI croisement dynamique est un outil qui permet de réaliser simplement et rapidement des croisements spatiaux d’entités géométriques, comme extraire les enjeux inclus dans une zone inondable.
Tout en restant dans un environnement de Qgis (affichage et toutes les fonctionnalités de l’application qui vont avec), le plugin s’appuie sur la puissance de traitement d’un serveur Postgis en parallélisant les requêtes multiples en tâche de fond pour ne pas freiner l’utilisateur dans son exploration du territoire.
Tout est entièrement en « clic bouton » et ne nécessite aucune compétence particulière en langage SQL.
En résumé, le plugin fabrique dynamiquement la requête adaptée aux différentes options choisies et affiche en retour le résultat dans la symbologie pré-paramétrée. Un petit module de statistiques permet ensuite de travailler sur les valeurs contenues dans les champs (somme, moyenne, etc) en les regroupant par l’agrégation spatiale choisie.
Pré-requis:
Le plugin est distribué sur le dépôt de la DDT67 : http://piece-jointe-carto.developpement-durable.gouv.fr/DEPT067A/QGIS/plugins/plugins.xml
qu’il suffit d’ajouter à la liste de vos dépôts dans le menu d’extension pour pouvoir le télécharger et bénéficier de ses mises à jour
Une fois installée, vous pouvez accéder aux deux modules disponibles par le menu général :
Analyser : module principal du plugin, est également accessible par sa petite icône qui s’installe aussi dans la barre de raccourcis des extensions et sera décrit plus précisément dans les chapitres 4.paramétrer & administrer et 5.Utiliser
Configurer : module de paramétrage de la connexion à Postgres/Postgis, sera également proposé via le module principal lorsque la connexion échoue (ou à la première utilisation), décrit au chapitre 3.Configurer
A propos : Lien vers le manuel d'utilisation que vous êtes en train de lire
La première chose à faire est de définir la connexion à la base de donnée Postgis souhaitée, ces paramètres sont ensuite stockés dans le fichier de configuration parameter.ini du plugin et ne seront pas redemandés.
Le schéma d’exécution
Il doit impérativement être accessible en lecture / écriture à tous les utilisateurs. C’est un prérequis sans lequel le plugin ne pourra pas fonctionner car tous les résultats de croisements spatiaux sont stockés dans des tables temporaires. La table définie dans Execution y est générée ainsi que toutes les tables de stockage temporaire du résultat des requêtes. Le plugin ne monte pas de processus de nettoyage automatique intégré à la base de données, mais ces tables peuvent être toutes supprimées en un clic via l’interface.
Le schéma d’administration
Il peut être identique au schéma d’exécution (comportement par défaut si laissé vide) ou spécifié différent pour restreindre les utilisateurs qui pourront effectuer le paramétrage du plugin (décrit dans le chapitre 4.paramétrer & administrer).
La table définie dans Administration y est générée. C’est celle qui permet d’administrer le plugin en enregistrant la liste des couches qui seront présentées et utilisées dans le plugin, ainsi que des métadonnées associées pour permettre une personnalisation et une fluidification de l’utilisation.
La base peut contenir d’autres schémas, uniquement accessible en lecture, qui contiennent déjà des couches SIG pouvant être référencées et utilisées par le plugin, sans que les utilstateurs puissent risquer de les modifier ou les supprimer.
Une fois les choix effectués et les tables générées… il n’y a plus qu’à Lancer l’application !
Ce chapitre décrit l’utilisation des 3 onglets
A la toute première utilisation dans votre environnement Postgis, la table d’administration est générée vide, il est donc nécessaire d’y référencer les couches SIG qui vont servir aux croisements spatiaux. Le paramétrage associé est stocké en base de données, cela signifie qu’il est commun à tous les utilisateurs.
L’ajout de nouvelles couches se fait à l’aide du bouton
Il y a trois façons d’ajouter une nouvelle couche
En cliquant sur Ajouter l’écran bascule alors sur le paramétrage de la couche (qui pourra ensuite être repris ultérieurement en la sélectionnant dans la liste)
Définit la fonctionnalité de la couche, et surtout les endroits où elle sera présentée. La modification de ce paramètre sera gelée si la couche est associée à un groupe (les couches d'un même groupe devant être nécessairement de même type). Il y a trois sortes de couches possibles :
Permet d’avoir un nom affiché pour la couche plus humain que celui, parfois un peu barbare, utilisé pour le stockage en base de donnée qui respecte une convention précise. Permet aussi de ne préciser que la sous-partie spécifique à la couche lorsque celle-ci est rattachée à un groupe. Le nom affiché sera :
- le nom de la table si rien n’est spécifié
- le nom de l’alias si spécifié
- le nom du groupe suivi de l’alias si rattachée
Permet d’enregistrer pour chaque couche un style par défaut qui sera automatiquement utilisé lors de l’affichage d’une couche. La liste de styles proposés variera en fonction du type de géométrie de la couche.
Sont utilisés par les filtres (en plus du nom de la table, de son alias et des noms de groupe et de bloc si renseignés) pour effectuer la recherche de correspondance et réduire le nombre de couches présentées dans les différents blocs.
Sert à regrouper toutes les couches d’un même périmètre géographique sous un même item. Lorsque l’option Liste compacte est activée, ces couches seront présentées en liste déroulante d’une même case à cocher et l’affichage de l’une remplacera automatiquement celle de l’autre sans faire de superposition sur la cartographie.
Une fois créé, le groupe est une entité (presque) comme les autres couches sur lequel on peut affecter (presque tous) les paramètres de ce chapitre qui s'appliqueront en cascade sur toutes les couches enfantes lorsque l'option Liste compacte est activée.
Sert à rassembler toutes les couches d’une même thématique sous un même item. Lorsque l’option Arborescence en blocs est activée, ces couches pourront être affichées ou masquées sur simple clic du nom du bloc.
Contrairement au groupe, le bloc n'est qu'un dossier sans aucune propriété à part son nom. La pemière liste déroulante ne concerne que l'affectation de l'objet en cours. Ainsi, modifier le nom d'un bloc dans cette liste créera un nouveau groupe sans affecter le rattachement des autres couches ciblant le même bloc. Pour modifier le libellé d'un groupe en cascade sur tous les objets qui lui sont rattachés, il faut passer par la petite icône .
Ce paramètre est accessible uniquement pour les couches ponctuelles (point ou multipoint).
Lorsque l’affichage est activé en mode cluster il est possible de choisir le champ sur lequel faire une somme au lieu de simplement compter le nombre d’entités. Il s’agit d’un préréglage par défaut, chaque utilisateur pourra toujours choisir de le modifier via l’onglet de croisement dynamique.
Permet d’enregistrer les statistiques qui sont souvent utilisées sur une couche donnée, opération et champ cible (cf onglet des Statistiques). Il s’agit d’un préréglage par défaut, chaque utilisateur pourra toujours choisir de le modifier via l’onglet de statistiques.
Permet de forcer l'odre de renvoi des couches avec un indice numérique (par défaut c'est l'ordre alphabétique de l'alias qui prime).
Journal des tâches
Liste de toutes les requêtes construites dynamiquement par l’action de l’utilisateur et qui sont en cours ou en attente de traitement. Un rappel de la charge de travail est également reporté sur l’onglet principal de travail ( croisement dynamique) au moyen d’une barre qui se colore selon le nombre de tâches en traitement (vert-jaune-orange-rouge).
Si trop de tâches sont lancées simultanément, il est conseillé de calmer l’utilisation pour éviter de provoquer un plantage de Qgis.
Enfin, un petit bouton d’arrêt permet d’essayer d’annuler des tâches qui mettraient trop de temps à s’exécuter (action globale sur toutes les tâches en cours)
Maintenance
Le premier bloc donne quelques informations générales (version du plugin, connexion à la base de données, etc). Cela peut être utile si vous basculez l'utilisation du plugin entre des environnements différents, pour vérifier ce sur quoi vous travaillez. La petite icône en bas à droite de ce bloc permet de sauvegarder une copie de tout le fichier parameter.ini en cours pour une bascule plus rapide entre les connexions, au moyen d'une liste déroulante qui apparaîtra lorsqu'au moins une configuration aura été sauvegardée (sous le bloc décrit ici et en en cas d'échec de connexion du plugin).
L'icône du bouton de connexion sera rappelée devant chaque élément de la liste déroulante dont les éléments de connexion sont identiques à celle en cours.
Viennent ensuite une série de boutons qui permettent un contrôle plus avancé :
Ce sont les onglets de simple utilisation, aucune action dedans ne créera de modification dans la base Postgres hormis la création des tables temporaires issues des différentes requêtes effectuées.
Croisement dynamique
Il s’agit de l’onglet principal de travail, il propose la liste des couches paramétrées en Enjeux et
Aléas avec des petites barres de filtre dynamique permettant de limiter l’affichage et de retrouver plus facilement une couche ciblée.
Options du plugin
Regroupe toutes les options qui permettent de personnaliser le travail de chaque utilisateur. Il y a les options de géométrie qui agissent sur le croisement des données et le rendu des couches et les options d’affichage qui agissent sur l’interface du plugin. Toutes les options sont interactives et la modification d’un paramètre va, si nécessaire, générer le re-calcul de toutes les couches affichées.
Tous les choix sont mémorisés dans le fichier parameter.ini et seront conservés à la prochaine utilisation du plugin.
Filtre sur aléas
Permet de limiter les entités d'aléas à partir desquelles le croisement des enjeux est effectué.
Toutes les couches qui utilisent le style «Fichier» peuvent bénéficier de cette fonctionnalité. Il suffit de décocher un item de la légende pour que les enjeux ne soient pas croisés avec.
Relancera le croisement des enjeux à partir des entités d'aléas sélectionnées dans QGis.
Relancera le croisement des enjeux à partir des entités d'aléas visibles dans QGis.
Statistiques
Permet de lancer des calcul d’agrégation spatiale sur les enjeux croisés. Les fonctions disponibles sont « somme », « moyenne », « minimum » et « maximum ».
Pour chaque enjeu, il est possible de rajouter autant d’opération souhaitée sur les champs de la couche (« somme & moyenne » ne proposeront que les champs numériques, « minimum & maximum » travailleront avec l’ordre alphabétique des champs textes).
Les entités sont systématiquement comptées sans qu’il soit nécessaire le paramétrer. De la même manière, si la couche est linéaire (ligne ou multiligne) la longueur totale sera calculée, et si la couche est surfacique (polygne ou multipolygone) la surface totale sera calculée.
Cette section est loin d'être indispensable pour utiliser le plugin, mais permet de mieux comprendre certains mécanismes et de personnaliser son utilisation au-delà des possibilités prévues par l'interface.
Les styles
Outre les possibilités de symbologie natives au plugin, il est possible d'en définir de nouvelles au moyen de fichiers JSON à placer dans le répertoire styles à la racine du dossier du plugin. Il est possible de modifier, enlever ou rajouter autant de fichiers JSON souhaités, mais si les fichiers ne sont pas propagés à l'ensemble des utilisateurs d'un même environnement de travail (ie: base, schéma et nom de table d'administration identique), le style défini ne pourra pas être utilisé et le plugin réutilisera le style par défaut de QGis.
Chaque style est un fichier texte qui doit obligatoirement avoir l'extension .json et respecter strictement le format JSON (il existe des valideurs en ligne pour vérifier et corriger la validité du format si nécessaire), sans quoi ils seront ignorés par le plugin.
Enfin, il est possible de désactiver un style sans le supprimer en ajoutant un second fichier vide de même nom en changeant seulement l'extension .json en .freeze. Cela aura pour effet de ne plus proposer le style dans la liste déroulante, mais il continuera à pouvoir être utilisé pour les couches où il a été paramétré.
Les images
Toutes les images utilisables par le moteur de rendu Qgis pour représenter les entités doivent être au format SVG.
Le plugin s'appuie à la fois sur la bibliothèque d'images native à Qgis, ainsi que toutes les images qui sont placées dans le répertoire svg situé à la racine du dossier du plugin: il est possible d'en rajouter autant que souhaité, elles seront automatiquement proposés par la paramétrisation du style, mais si les fichiers ne sont pas propagés à l'ensemble des utilisateurs d'un même environnement de travail (ie: base, schéma et nom de table d'administration identique), l'image ne pourra pas être chargée et QGis affichera un point d'interrogation à la place.
A chaque nouvelle mise à jour du plugin, le répertoire images reprendra intégralement sa configuration par défaut.
Pour conserver les fichiers ajoutés, il faudra bien penser à réaliser une sauvegarde avant de procéder à la mise à jour, puis la restaurer (voir onglet Maintenance).
Le paramétrage
Il y a le paramétrage général des couches (voir onglet Gestion des données) qui est stocké en base de données : cela permet de le partager entre plusieurs utilisateurs et de conserver les données lors de la mise à jour du plugin.
Tout le reste est propre à chaque utilisateur et est mémorisé dans le fichier parameter.ini qui se trouve à la racine du dossier du plugin (peut être édité via l'onglet Maintenance). La plupart des paramètres sont directement modifiables par l'interface du plugin (notamment via l'onglet
Options du plugin) mais il est possible d'en modifier directement certains pour mieux personnaliser son utilisation.
En cas de modification manuelle, il faut veiller à respecter strictement le nom des variables et leur section de rattachement (mais l'ordre importe peu). Si le paramètre est manquant, il sera réinitialisé à sa valeur par défaut, mais si sa valeur ne correspond pas à un format attendu par le plugin, cela peut provoquer des dysfonctionnements.
Le contenu du fichier parameter.ini est également conservé dans les paramères généraux de Qgis.
Ainsi, vos paramètres ne seront pas perdus lors de la mise à jour du plugin.
Le fichier parameter.ini comporte 4 sections :
(les paramètres marqués d'une sont modifiables via l'interface)
Les requêtes SQL
Cette section n'est pas un cours sur le langage SQL, mais vise à décrire les mécanismes du plugin et les fonctions Postgis associées. Il n'est pas possible d'implémenter de nouvelles fonctionnalités SQL dans le plugin sans passer par de la reprise du code. Néanmoins, une meilleure compréhension de ces mécanismes peut permettre de mieux appréhender les résultats obtenus, voire pour les néophytes, de se familiariser un peu au croisement spatial dans Postgis.
Le coeur de l'application repose sur l'utilisation de la fonction ST_Intersects() qui permet de savoir si deux géométries se superposent au moins un peu. C'est donc cette fonction qui est systématiquement utilisée dans une clause WHERE pour croiser les enjeux inclus dans les aléas. A noter que cette fonction récupère également les géométries qui sont jointives (sur le trait).
Pour ne pas récupérer la totalité de la géométrie mais uniquement la partie qui se superpose (activation de l'option Découper), la requête SELECT se combine avec la fonction ST_Intersection() appliquée à la colonne de géométrie des enjeux.
A l'inverse, pour récupérer les enjeux qui ne sont pas inclus dans l'aléa (activation de l'option Inversibilité croisement) la requête SELECT se combine avec la fonction ST_Difference().
Pour optimiser l'exécution des requêtes SQL, chaque croisement enjeu/aléa est réalisé de façon unitaire, puis le résultat est ensuite combiné (utilisation de UNION) pour avoir une couche unique par enjeu. Ainsi lorsque que la liste d'aléas cochés est modifiée (un de plus ou un de moins), il n'est pas nécessaire de relancer le croisement sur l'ensemble des combinaisons aléa/enjeu déjà traitées.
Cette recombinaison n'est néanmoins pas toujours possible, notamment si on active Découper, car la géométrie d'une même entité issue de plusieurs croisement ne va plus être identique du fait de son découpage, et la réunion des croisements unitaires peut conduire à récupérer des entités en double (ou manquante dans le cas de l'inversion). Dans ce cas le plugin lancera un croisement unique sur la réunion des aléas sélectionnés.
Ensuite, la requête SQL se complexifie en fonction des différentes options qui sont activées. Par exemple, on va combiner sur l'aléa en plus du ST_Union() de base (qui permet de réunir les entités), un ST_SimplifyPreserveTopology() pour Simplifier la géométrie, un ST_Buffer() pour ajouter un Tampon, et des mécanismes de Correction à la volée avec ST_MakeValid() (plus un tampon à 0 sur les polygones).
Lors de l'application de fonctions qui modifient la géométrie, il est possible que certaines entités voient leur typologie changer, et pour être correctement affichée dans Qgis il est important de bien garder toutes les entités d'une couche dans un type unique. Les fonctions ST_Dump() & ST_Multi() permettent de forcer la passage à des géométries simples ou multiples. La fonction ST_CollectionExtract() permet de ne conserver que les entités point, ligne ou polygone selon le type d'origine de la couche (détection avec geometryType()).
Enfin, bien qu'il soit préférable de travailler avec toutes les couches dans un système unique de projection, des mécanismes de reprojection avec ST_Transform() seront appliqués si les systèmes de coordonnées aléa/enjeu diffèrent (détection avec ST_Srid()).
NB: pour contourner l'impossibilité via Qgis3 d'afficher dans son rendu "Groupe de points" une statistique d'attribut sur les points regroupés, le plugin va démultiplier avec generate_series() autant que nécessaire chaque entité pour que le nombre d'entités corresponde à la valeur de l'attribut ciblé (modulo la précision souhaitée). C'est pourquoi l'option somme sur attribut du Rendu cluster peut être très coûteuse en temps, à la fois en génération de la couche mais surtout en transfert de données du serveur vers Qgis.