-
Notifications
You must be signed in to change notification settings - Fork 3
Home
- Cliquez sur l'icône ci-dessous (control tool)

-
Dessiner / Digitaliser un rectangle sur une zone de la carte en maintenant le bouton gauche de la souris enfoncé Contraintes: la zone doit être un polygone, la zone ne doit pas être plus grande que 1 km2
-
Cochez les contrôles à effectuer sur la zone en question. Par défaut, les contrôles principaux a effectués sur la zone sont déjà sélectionnés. Vous pouvez aussi soit tous désélectionner ou tous sélectionner. Une fois, les contrôles choisis, valider en cliquant sur "ok".
-
Les contrôles s'exécutent sur la zone définie et en cas d'erreurs détectées, celles-ci sont rassemblées dans un groupe nommé "CONTROL" avec la date courante. Chaque contrôle génère une couche (SQL layer) qui s'ajoute au projet QGIS. Par ailleurs, un message apparaît dans le bandeau d'info de QGIS indiquent le nombre d'erreurs. Si aucune erreur n'est détectés, aucune couche n'est bien entendu ajouté au projet. Il se peut que l’exécution des contrôles prennent du temps, cela peut être dû à la taille de la zone définie, aux nombres de contrôles, à la complexité de la requête SQL.
-
Enfin, si vous corrigez les erreurs sur la couche d'origine, ceci va mettre à jour directement les couches d'erreurs et supprimer la faute. Une fois, les corrections effectuées, nous vous conseillons de relancer le contrôle sur la même zone. Le groupe "CONTROL" est ajouté temporairement au projet, il est préférable de le supprimer dés que la zone a été nettoyée.
Voir la démo ci-dessous :

Pour que ce plugin fonctionne, il est impératif de définir une table dans une base de données de type "Postgres". Cette table contient la liste des contrôles à effectuer par l'outil, notamment :
- id : identifiant du contrôle (* obligatoire)
- code_error : code de l'erreur. Ex. : 137
- layer_name : nom de la couche qui va être créée dans QGIS si le contrôle est positif (* obligatoire). Ex. : 137 - Conduites non connectées
- description : description qui explique le contrôle. Ex. : Retourne une liste des conduites non connectées à d'autres conduites
- attribute_name : noms des attributs à récupérer d'une table dans une SELECT SQL (ceci n'est pas encore implémenté par le plugin)
- key_attribute : clé identifiant de la couche ajouté (* obligatoire). Ex. : id_r
- sql_function : Fonction SQL du contrôle à exécuter (* obligatoire). Ex. : (SELECT * FROM qwat_od.fn_ctrl_pipe_connect(bbox))
- sql_param : paramètre à remplacer dans la requête SQL, variable obligatoire "bbox"pour intégrer l'emprise géométrique (* obligatoire). Ex. : bbox
- sql_clause_where : condition WHERE à rajouter à la requête - encore non implémenté dans le plugin.
- geom_name : nom de l'attribut qui comporte la géométrie du contrôle (* obligatoire). Ex. : geom_r
- geom_type : type de géométrie retourné par le contrôle (* obligatoire). Ex. : POINTZ
- geom_srid : numéro ESPG identifiant le système de coordonnées utilisé pour la couche à ajoutée (* obligatoire). Ex. : 21781
- geom_dim : dimension de la géométrie ajoutée au projet (* obligatoire). Ex. : 3
- layer_style : lien vers un fichier de type QML définissant la symbologie de la couche de contrôle à ajouter. Ex. : /qml/control_layer/Conduite_non_connectee.qml
- active : contrôle visible dans la liste des contrôles lors de l’exécution du plugin (* obligatoire). Ex. : true
- check_defaut : active ou non par défaut le contrôle à exécuter (* obligatoire). Ex. : false
Structure en SQL de la table :
CREATE TABLE qwat_vl.usr_control_request(
id serial NOT NULL,
code_error character varying(100),
layer_name character varying(100) NOT NULL,
description text,
attribute_name character varying[],
key_attribute character varying(20) NOT NULL DEFAULT 'id_r'::character varying,
sql_function text NOT NULL,
sql_param character varying(100),
sql_clause_where text,
geom_name character varying(100) NOT NULL DEFAULT 'geom_r'::character varying,
geom_type character varying(30) NOT NULL DEFAULT 'POINTZ'::character varying, -- Type de géométrie pour le resultat du contrôle
geom_srid integer NOT NULL DEFAULT 21781, -- système de coordonnées pour l'export du résultat
geom_dim smallint NOT NULL DEFAULT 3, -- dimension de la géométrie
layer_style text,
active boolean NOT NULL DEFAULT true,
check_defaut boolean NOT NULL DEFAULT true,
CONSTRAINT usr_control_request_pkey PRIMARY KEY (id)
);
Une fois la table définie dans votre base de données Postgres,
- Chargez/importez cette table dans le projet QGIS pour lequel des contrôles veulent être effectués.
- Définissez les paramètres du plugin en choississant la base de données, le schéma et la table de contrôle, comme illustré ci-dessous :
Grâce à cette configuration, l'utilisateur est libre de définir n'importe quels contrôles sur ces données simplement en définissant une requête SQL. Le résultat de la requête doit cependant contenir une géométrie et un identifiant. Par. exemple :
SELECT * FROM qwat_od.pipe WHERE ST_INTERSECTS(geometry3d,bbox);
où bbox est la géométrie de la zone définie. Il est possible de définir une requête sans prendre en compte la zone définie par l'utilisateur (bbox).
L'utilisateur peut aussi définir une fonction ou procédure stockée qui exécute une requête en passant comme paramètre la zone définie "bbox". Par ex. :
(SELECT * FROM qwat_od.fn_ctrl_pipe_connect_dist(bbox))
CREATE OR REPLACE FUNCTION qwat_od.fn_ctrl_pipe_connect_dist(IN polygon geometry DEFAULT '010300002015550000010000000500000000000000381E204100000000E097024100000000381E204100000000B8BF0241000000008A2D204100000000B8BF0241000000008A2D204100000000E097024100000000381E204100000000E0970241'::geometry)
RETURNS TABLE(id_r bigint, id_pipe_r integer, fk_status_r integer, fk_function_r integer, cts_r integer, node_r integer, geom_r geometry, dist_r numeric, code_error_r smallint) AS
$BODY$
DECLARE
result RECORD;
BEGIN
RETURN QUERY
--SELECT id FROM qwat_od.pipe WHERE fk_status != 13002 AND geometry3d && polygon;
WITH
pipe_selection(id, fk_status,fk_node_a,fk_node_b, fk_function, geom) AS
(SELECT id, fk_status,fk_node_a,fk_node_b, fk_function, geometry3d FROM qwat_od.pipe WHERE fk_status!=13002 AND deleted is false AND ST_Intersects(geometry3d,polygon) is true),
/*AND ST_Intersects(geometry3d,ST_GeomFromText('POLYGON((528156 152316,528156 153591,530117 153591, 530117 152316, 528156 152316))',21781)) is true),*/
vertex(id, id_pipe,fk_status,fk_function,cts,node,geom) AS
(SELECT ROW_NUMBER() OVER() as id, t.* FROM (SELECT id as id_pipe, fk_status,fk_function, ST_NPoints(geom), fk_node_a, ST_StartPoint(geom)::geometry(POINTZ,21781) as geom FROM pipe_selection
UNION ALL SELECT id as id_pipe, fk_status,fk_function, ST_NPoints(geom), fk_node_b, ST_EndPoint(geom)::geometry(POINTZ,21781) as geom FROM pipe_selection) t)
SELECT distinct v.id, v.id_pipe,v.fk_status,v.fk_function,v.cts,v.node, v.geom,(SELECT ST_Distance(v.geom,geom) FROM pipe_selection WHERE id!=v.id_pipe ORDER BY 1 LIMIT 1)::numeric as dist_close, 150::smallint as code_error FROM vertex v
WHERE (SELECT id FROM pipe_selection WHERE id!=v.id_pipe AND ST_DWithin(v.geom, geom,0.001) ORDER BY ST_Distance(v.geom,geom) LIMIT 1) is null AND
(SELECT ST_Distance(v.geom,geom) FROM pipe_selection WHERE id!=v.id_pipe ORDER BY 1 LIMIT 1) < 0.15
ORDER BY dist_close;
--select id FROM pipe_selection;
END;
$BODY$
La table de configuration des contrôles dans le plugin ne contient pas une liste de contrôles géométriques "standard", mais voici une liste des contrôles qui pourraient être intégrés :
-
Objets lignes (conduite) non connectées
-
Vertex dupliqués d'une ligne.
-
Segments de lignes (conduite) qui se superposent (colinéarité interne)
-
Segments de lignes (conduite) avec des angles incohérents - changement brutal de direction dans la digitalisation d'une ligne
-
Superposition de lignes (vertex communs, autres que les extrémités) - vertex double ou proche
-
Longueur des lignes hors tolérance (lignes très petites ou trop longue)
-
Objets points (éléments de réseau, vannes, etc.) non connectés à une ligne (conduite)
-
Objets points (éléments de réseau, vannes, etc.) qui se superposent
Daniel Savary @ 2018