PostGIS: corriger les problèmes de nested holes

Parfois, un polygone peut être mal défini: par exemple, au lieu d'avoir un polygone à trous, vous avez un polygone multiple avec deux polygones dont l'un devrait être le trou de l'autre. Ce problème géométrique est remonté dans PostGIS sous l'erreur "nested holes". Graphiquement, voici la représentation d'un nested hole dans QGis et son équivalent corrigé.

Images:

nested hole non nested hole

Comme pour le cas des duplicate rings , les nested holes entraînent l'impossibilité d'effectuer certaines opérations géométriques.

La fonction qui suit a été réalisée en PG/PLSQL dans l'objectif de corriger le cas particulier de nested holes dans des polygones multiples. Elle devrait bien se comporter dans la majorité des cas mail il est probable que certaines situations ne soient pas gérées.

La fonction retourne une géométrie corrigée. Voici un petit exemple d'utilisation sur une couche nommée "parcelles":

SELECT ST_IsValid(corrige_nested_holes(wkb_geometry)) FROM "parcelles";

Pour mettre à jour une table:

UPDATE "parcelles" SET wkb_geometry=corrige_nested_holes(wkb_geometry) WHERE ST_IsValid(wkb_geometry) = FALSE;