J'ai importé des données dans une base de données Postgis et certaines géométries sont signalées comme non valides (ST_IsValidReason signale une auto-intersection ou une auto-intersection en anneau).
Les requêtes que j'effectue ne semblent pas affectées par l'aspect invalide de ces géométries (j'utilise uniquement des requêtes ST_Distance).
Quelles sont les choses qui se cassent lorsque les géométries ne sont pas valides?
La fixation de ces géométries "automatiquement" (buffer (geom, 0) ou ST_SimplifyPreserveTopology (geom, 0.0001)) est-elle une option?
la source
ST_Buffer(the_geom, 0.0000001)
pourrait faire l'affaire pour l'auto-intersection. Utilisez-le uniquement si les conséquences d'une géométrie légèrement plus grande ne sont pas graves.ST_Buffer(the_geom, 0.0000001)
astuce aide certainement beaucoup.MULTIPOLYGON
des deux polygones, pas comme un seulPOLYGON
. Essayez d'obtenir le WKT d'origine si possible.Vous pouvez empêcher les géométries non valides d'entrer dans votre base de données en premier lieu. Pour les utilisateurs de PostgreSQL / PostGIS, cela est simple à faire avec les contraintes de vérification . Par exemple, considérez une table
public.my_valid_table
avec une colonne de géométries de polygonegeom
, utilisez le SQL / DDL suivant:Remarque: cette table doit avoir des polygones valides avant d'appliquer la contrainte.
Si vous essayez ensuite d'insérer / ajouter une géométrie non valide, vous verrez une erreur:
la source