Bagaimana cara mengubah / typecast dari Polygon ke Multipolygon di PostGIS?

30

Apakah ada cara untuk mengetik Poligon ke tipe Multipolygon?

Misalnya, saya telah membuat lingkaran menggunakan ST_Buffer () pada suatu titik. Tipe kembalinya fungsi tersebut adalah tipe Polygon. Masalahnya adalah bahwa pada kolom geometri ada batasan yang membatasi untuk tipe Multipolygon. Jadi, saya tidak bisa memasukkan poligon sederhana.

Saya telah menggunakan fungsi ST_MPolyFromText (), tapi seperti biasa ia mengembalikan null untuk itu dan ST_Dump () tidak memberikan output yang tepat.

Kendalanya adalah:

CONSTRAINT enforce_geotype_geom CHECK (geometrytype(geom) = 'MULTIPOLYGON'::text OR geom IS NULL),
Vicky
sumber
Apakah ada alasan untuk menambahkan batasan multipolygon? Bagaimana dengan mengubah batasan menjadi poligon?
underdark
Bukankah ini pertanyaan anak-anak tentang gis.stackexchange.com/questions/14198/… ?
unicoletti
Memang, tapi bisa juga diulang menjadi pertanyaan yang berdiri sendiri juga.
underdark
ya ini adalah pertanyaan anak-anak ,, tetapi masalahnya adalah ketika Anda mengimpor shapefile ke postgis yang berisi lapisan poligon maka secara otomatis itu menciptakan geometri multipoligon. maka sedikit membosankan untuk mengkonversi datatype dari multipolygon ke polygon .. karena itu akan dilakukan oleh klien. Jadi, hanya perlu menyimpan output ke dalam colummn dari jenis yang dibuat oleh postgis ..
Vicky
PS: untuk melakukan kebalikannya, dari multi-ke-poli, gunakan st_geometryn(geom, 1).
Peter Krauss

Jawaban:

55

ST_Multi - Mengembalikan geometri sebagai geometri MULTI *. Jika geometri sudah menjadi MULTI *, itu dikembalikan tidak berubah.

Contoh:

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)
underdark
sumber