Suite

Postgis mise à jour multipolygone avec st_makevalid() donne une erreur


J'ai une table avec quelques géométries invalides (anneaux vides, auto-intersections). J'aimerais les réparer quelque chose comme ceci:

mettre à jour mytable set geomcolumn = st_makevalid(geomcolumn) où id = 123;

et je reçois "ERREUR : le type de géométrie (GeometryCollection) ne correspond pas au type de colonne (MultiPolygon)"

y a-t-il une autre fonction dont j'ai besoin pour envelopper le st_makevalid() pour obtenir un type compatible, ou autre chose?


ST_CollectionExtract extraira un type particulier de composant d'unGeometryCollection. Par exemple,ST_CollectionExtract(geom, 3)retournera unPolygoneou alorsMultipolygone.

Étant donné que votre type de colonne estMultipolygone, vous devrez peut-être envelopperST_CollectionExtractavec encore une autre fonction,ST_Multi, contraindrePolygonegéométries en monocomposantMultipolygones.

Faire attentionST_MakeValid- il fait généralement ce à quoi vous vous attendez, mais ce n'est pas magique et il peut parfois "corriger" votre géométrie de manière inattendue. C'est une bonne idée d'exécuter unSÉLECTIONNERrequête d'abord, pour voir ce qu'il a en tête.


Vous devez mettre à jour votre colonne de géométrie en extrayantMultipolygonesdeGeometryCollection. Exécutez simplement la requête ci-dessous et vous êtes prêt à partir

table de mise à jour définie geomcol = st_multi(st_collectionextract(st_makevalid(geomcol),3)) où st_isvalid(geomcol) = false ;