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),

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)
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.