Une table de la base de données contient des périmètres ZNIEFF, de type 1 et de type type 2. Les périmètres de type 1 peuvent être inclus dans une znieff de type 2. Si cette inclusion existe, elle est forcément totale.
Le problème rencontré est la nécessité de corriger les géométries des znieff de type 1 qui devraient être jointives sur une partie de leur contour avec une type 2.
La requête ci dessous permet d'afficher les nœuds de la géométrie de la znieff de type 1 non communs avec les nœuds de la géométrie de la ZNIEFF de type 2.
La version de PostGIS de la base de données utilisée en production ne propose pas certaines fonctions que nous souhaitons utiliser. C'est pourquoi nous utilisons dblink, afin d'utiliser les données de la base de productiona avec la base en développement (PostGIS 1.5).
Intégrer cette fonctionnalité à une fonction :
TRUNCATE point_a_corriger; INSERT INTO point_a_corriger /* affiche tous les points non communs entre deux géométrie et distant de moins de x mètre de la seconde */ SELECT row_number() over(), geom AS geometrie FROM ( SELECT (ST_DumpPoints(geometrie)).* FROM dblink('dbname=znieff port=5432 host=192.168.1.40 user=dba password=dbroot', 'select id_znieff, geometrie from znieff_validees where id_znieff=1081') AS znieff(id integer, geometrie geometry)) sub WHERE ST_ASText(geom) NOT IN ( SELECT ST_ASText(geom) AS a FROM ( SELECT (ST_DumpPoints(geometrie)).* FROM dblink('dbname=znieff port=5432 host=192.168.1.40 user=dba password=dbroot', 'select id_znieff, geometrie from znieff_validees where id_znieff=930') AS znieff(id integer, geometrie geometry)) sub2)