Skip to content

Latest commit

 

History

History
44 lines (33 loc) · 1.91 KB

validate_geometries.md

File metadata and controls

44 lines (33 loc) · 1.91 KB

Correction des géométries

Avec PostgreSQL on peut tester la validité des géométries d'une table, comprendre la raison et localiser les soucis de validité:

SELECT
id_parcelle,
-- vérifier si la géom est valide
ST_IsValid(geom) AS validite_geom,
-- connaitre la raison d'invalidité
st_isvalidreason(geom) AS validite_raison,
-- sortir un point qui localise le souci de validité
location(st_isvaliddetail(geom)) AS point_invalide
FROM z_formation.parcelle_havre
WHERE ST_IsValid(geom) IS FALSE

qui renvoit 2 erreurs de polygones croisés.

id_parcelle validite_geom validite_raison point_invalide
707847 False Self-intersection[492016.260004897 6938870.66384629] 010100000041B93E0AC1071E4122757CAA3D785A41
742330 False Self-intersection[489317.48266784 6939616.89391708] 0101000000677A40EE95DD1D41FBEF3539F8785A41

et qu'on peut ouvrir comme une nouvelle couche, avec le champ géométrie point_invalide, ce qui permet de visualiser dans QGIS les positions des erreurs.

PostGIS fournir l'outil ST_MakeValid pour corriger automatiquement les géométries invalides. On peut l'utiliser pour les lignes et polygones.

Attention, pour les polygones, cela peut conduire à des géométries de type différent (par exemple une polygone à 2 noeuds devient une ligne). On utilise donc aussi la fonction ST_CollectionExtract pour ne récupérer que les polygones.

-- Corriger les géométries
UPDATE z_formation.parcelle_havre
SET geom = ST_Multi(ST_CollectionExtract(ST_MakeValid(geom), 3))
WHERE NOT ST_isvalid(geom)

-- Tester
SELECT *
FROM z_formation.parcelle_havre
WHERE NOT ST_isvalid(geom)

Continuer vers Vérifier la topologie