Come convertire / typecast da Polygon a Multipolygon in PostGIS?


30

C'è un modo per digitare poligoni in tipo multipoligono?

Ad esempio, ho creato un cerchio usando ST_Buffer () su un punto. Il tipo restituito di quella funzione è di tipo Poligono. Il problema è che sulla colonna della geometria esiste una limitazione che lo limita al tipo Multipolygon. Quindi, non posso inserire un semplice poligono.

Ho usato la funzione ST_MPolyFromText (), ma come al solito restituisce null per questo e ST_Dump () non fornisce l'output corretto.

Il vincolo è:

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

C'è un motivo per aggiungere un vincolo multipoligono? Che ne dici di cambiare il vincolo in poligono?
underdark

Non è una questione per bambini di gis.stackexchange.com/questions/14198/… ?
unicoletti,

Lo è, ma potrebbe essere riformulato per essere una domanda autonoma.
underdark

sì, questa è una domanda da bambini, ma il problema è quando si importa lo shapefile nel postgis che contiene lo strato poligonale, quindi crea automaticamente la geometria del multipoligono. quindi è un po 'noioso convertire il tipo di dati da multipoligono a poligono .. perché sarà fatto dal cliente. Quindi non mi resta che salvare l'output in quella colonna di quel tipo creato dai postgigi ..
Vicky,

PS: per fare l'inverso, da multi-a-poly, usa st_geometryn(geom, 1).
Peter Krauss,

Risposte:


55

ST_Multi : restituisce la geometria come geometria MULTI *. Se la geometria è già un MULTI *, viene restituita invariata.

Esempio:

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)
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.