Comment convertir / transtyper de Polygon en Multipolygon dans PostGIS?


30

Existe-t-il un moyen de transtyper des polygones en type multipolygone?

Par exemple, j'ai créé un cercle en utilisant ST_Buffer () sur un point. Le type de retour de cette fonction est de type Polygon. Le problème est que sur la colonne géométrique il y a une restriction la limitant au type Multipolygon. Donc, je ne peux pas insérer un simple polygone.

J'ai utilisé la fonction ST_MPolyFromText (), mais comme d'habitude, elle renvoie null pour cela et ST_Dump () ne donne pas la sortie appropriée.

La contrainte est:

CONSTRAINT enforce_geotype_geom CHECK (geometrytype(geom) = 'MULTIPOLYGON'::text OR geom IS NULL),

Y a-t-il une raison pour ajouter une contrainte multipolygone? Que diriez-vous de changer la contrainte en polygone?
underdark

N'est-ce pas une question pour les enfants de gis.stackexchange.com/questions/14198/… ?
unicoletti

Il l'est, mais il pourrait être reformulé pour être une question autonome aussi.
underdark

oui, c'est une question pour les enfants, mais le problème est que lorsque vous importez le fichier de formes dans le postgis qui contient la couche polygonale, il crée automatiquement la géométrie du multipolygone. il est alors un peu fastidieux de convertir le type de données de multipolygone en polygone .. car cela sera fait par le client. Il suffit donc de sauvegarder la sortie dans cette colonne de ce type créée par le postgis ..
Vicky

PS: pour faire l'inverse, du multi-poly, utilisez st_geometryn(geom, 1).
Peter Krauss

Réponses:


55

ST_Multi - Renvoie la géométrie sous forme de géométrie MULTI *. Si la géométrie est déjà un MULTI *, elle est retournée inchangée.

Exemple:

SELECT ST_AsText(ST_Multi(ST_GeomFromText('POLYGON((743238 2967416,743238 2967450,
        743265 2967450,743265.625 2967416,743238 2967416))')));
        st_astext
        --------------------------------------------------------------------------------------------------
        MULTIPOLYGON(((743238 2967416,743238 2967450,743265 2967450,743265.625 2967416,
        743238 2967416)))
        (1 row)
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.