- 3.1 Connecter QGis à Sysma
- 3.2 Paramétrer un menu QGis avec les couches Sysma
- 3.3 Un peu de SQL
- 3.4 Un exemple concret : générer un Atlas bilan annuel des travaux
3.1 Connecter QGis à Sysma
Il est fortement conseillé d'utiliser une authentification basic à minima.
note pour les strctures mutualisées, vous pouvez vous référer à cette documentation un peu plus complète : https://gitlab.sevre-nantaise.com/mutualisation-sysma/documentation/-/blob/main/Tutoriels/tuto_connexion_sysma_qgis.pdf
Penser à utiliser la même valeur au niveau de l'Id (fenêtre de droite, ici par exemple exsigle
) pour l'ensemble des agents de votre structure (les credentials : login et mdp peuvent varier). Cela permet de pouvoir partager des projets QGIS en toutes sécurité car pour chaque couche d'un projet, QGIS va se référer aux informations d'authentification (login + mdp de l'agent) correspondant à l'Id sans partager les credentials.
3.2 Paramétrer un menu QGis avec les couches Sysma
3.2.1 Créer un projet QGIS avec vos couches contenues dans le schema sysma_export_layer.
Dans notre exemple ce projet sera nommé SYSMA_COUCHES_EPTBSN et enregistré sur une disque partagé.
note : vous pouvez vous appuyer sur le script python suivant à lancer dans QGIs pour générer automatiquement le projet QGIS https://gitlab.sevre-nantaise.com/eptbsn/sysma-tickets/-/blob/master/QGIS/sysma_export_layer2qgisPrj.py
note : il est possible de stocker le fichier projet dans Postgres cf #165 (comment 4680)
3.2.2 Installer le plugin QGIS layers menu from project
3.2.3 Ajouter le projet SYSMA dans le menu de configuration du plugin :
3.3 Un peu de SQL
- Notions générales de SQL : https://sql.sh/
- SQL spatial avec Postgis (tutoriel), lien suivant et autres pages : http://postgis.fr/chrome/site/docs/workshop-foss4g/doc/joins.html
- Documentation officielle Postgis : https://postgis.net/documentation/
3.3.1 Quelques requêtes simples pour récupérer des données Sysma dans Qgis
Depuis les couches du schema sysma_export_layer (image des données en date de la dernière opération d'export dans sysma)
Les couches pg sont requêtables en SQL ou via les filtres de QGIS.
Pour connaitre la date de validité des données dans QGIS / propriété de la couche / Information
3.3.2 Aller plus loin avec le SQL : joindre des couches Sysma à la volée et les afficher dans QGis
Cette solution est la plus puissante, elle permet d'accéder aux données 'en live' et de construire des analyses globales.
- Requête simple pour visualiser les différents valeurs de contrats
-- SELECT colonne1, colonne2 FROM schema.table
SELECT
contracts
FROM sysma.sysma_action;
- la liste est répétitive -> suppression des doublons lors de l'affichage
-- NOTION : Mot clé DISTINCT
SELECT
DISTINCT contracts
FROM sysma.sysma_action
- selection des actions rattachées au contrat CT EAU (2021-2026)
-- NOTION : CLAUSE WHERE
SELECT
sysma_action_id, sysma_action
FROM sysma.sysma_action
WHERE contracts = '{"CT EAU (2021-2026)"}' -- uniquement les actions rattachées à un seul contrat : CT EAU (2021-2026)
- pour avoir les actions rattachées au moins à CT EAU (2021-2026)
-- NOTION : CLAUSE WHERE suite ...
SELECT
sysma_action_id, sysma_action
FROM sysma.sysma_action
WHERE contracts::TEXT = ilike '%"CT EAU (2021-2026)"%' -- c'est une des façons d’exécuter le filtre en SQL
- Pour avoir les actions rattachées au moins au contrat CT EAU (2021-2026) et programmées en 2022
-- NOTION : CLAUSE WHERE suite...
SELECT
sysma_action_id, sysma_action
FROM sysma.sysma_action
WHERE contracts::TEXT ilike '%"CT EAU (2021-2026)"%' -- c'est une des façon d'executer le filtre en SQL
AND program_year = 2021; -- année de programmation
- Récupération des géométries des objets et affichage de la couche dans QGIS
-- Notions :
-- # CTE (instruction WITH)
-- # Alias (mot clé AS)
-- # Jointure (Instruction JOIN .. ON(...))
WITH
actions as ( -- filtre sur nos actions
SELECT
sysma_action_id, sysma_action, sysma_action_type_id, program_year
FROM sysma.sysma_action
WHERE contracts::TEXT ilike '%"CT EAU (2021-2026)"%' -- c'est une des façon d'executer le filtre en SQL
AND program_year = 2021
)
, id_object_lists AS ( -- recuperation de la liste des id_object liés aux actions selectionnées
SELECT
a.sysma_action_id
, a.sysma_action
, a.sysma_action_type_id
, a.program_year
, loa.sysma_object_id
FROM actions a
JOIN sysma.l_sysma_object_sysma_action loa ON (a.sysma_action_id = loa.sysma_action_id) -- jointure sur les sysma_action_id
)
, selected_objects AS ( -- recupération de la geometrie des objets
SELECT
idol.* -- '*' = toutes les colonnes de idol
, st_buffer(o.geom, 10)::geometry(polygon, 2154) AS geom_buff -- astuce : toutes les géométries sont transformées en polygone pour n'obtenir qu'une couche dans QGIS
FROM id_object_lists idol
LEFT JOIN sysma.sysma_object o on (o.sysma_object_id = idol.sysma_object_id) -- jointure sur les sysma_object_id
)
, selected_objects_with_action_type_names AS ( -- ajout des noms des types d'actions
SELECT
aty.sysma_action_type
, so.*
FROM selected_objects so
LEFT JOIN sysma.sysma_action_type aty ON (aty.sysma_action_type_id = so.sysma_action_type_id)
)
-- Construction de la table finale avec ajout d'un identifiant unique (gid)
SELECT
row_number() over() as gid
, sowaty.*
FROM selected_objects_with_action_type_names sowaty
ORDER BY st_area(sowaty.geom_buff) DESC -- Permet d'afficher les petites géometries au dessus de la couche
A lancer dans le DB manager de QGIS et charger la couche:
- colonne avec les valeurs uniques :
gid
- colonne géométrique :
geom_buff
3.4 Un exemple concret : générer un Atlas bilan annuel des travaux
Exemple d'atlas QGIS par masse d'eau :
...