¿Cómo convertir / typecast de Polígono a Multipolígono en PostGIS?

30

¿Hay alguna forma de convertir los polígonos al tipo Multipolígono?

Por ejemplo, he creado un círculo usando ST_Buffer () en un punto. El tipo de retorno de esa función es de tipo Polígono. El problema es que en la columna de geometría hay una restricción que lo limita al tipo Multipolígono. Entonces, no puedo insertar un polígono simple.

He usado la función ST_MPolyFromText (), pero como de costumbre, devuelve nulo para eso y ST_Dump () no está dando el resultado adecuado.

La restricción es:

CONSTRAINT enforce_geotype_geom CHECK (geometrytype(geom) = 'MULTIPOLYGON'::text OR geom IS NULL),
Vicky
fuente
¿Hay alguna razón para agregar una restricción multipolígono? ¿Qué tal cambiar la restricción a polígono?
oscuro
¿No es una pregunta infantil de gis.stackexchange.com/questions/14198/… ?
unicoletti
Lo es, pero también podría reformularse como una pregunta independiente.
oscuro
sí, esta es una pregunta secundaria, pero el problema es cuando importa el archivo de forma al postgis que contiene la capa de polígono y luego crea automáticamente la geometría del multipolígono. entonces es un poco tedioso convertir el tipo de datos de multipolígono a polígono ... porque eso lo hará el cliente. Así que sólo hay que guardar la salida en ese colummn de este tipo creado por la PostGIS ..
Vicky
PD: para hacer lo inverso, de multi-a-poli, use st_geometryn(geom, 1).
Peter Krauss

Respuestas:

55

ST_Multi : devuelve la geometría como una geometría MULTI *. Si la geometría ya es MULTI *, se devuelve sin cambios.

Ejemplo:

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)
bajo oscuro
fuente