Mengumpulkan objek geometry menjadi tipe MULTI\* atau GeometryCollection, tergantung pada apakah objek geometry input homogen (memiliki tipe yang sama) atau heterogen (memiliki tipe berbeda).
Sintaksis
geometry ST_Collect(geometry g1, geometry g2);
geometry ST_Collect(geometry[] g1Array);
geometry ST_Collect(geometry set g1Field);Parameter
| Parameter | Deskripsi |
|---|---|
g1 | Objek geometry pertama. |
g2 | Objek geometry kedua. |
g1Array | Array berisi objek geometry. |
g1Field | Bidang berisi objek geometry dari suatu set data, digunakan saat memanggil ST_Collect sebagai fungsi agregat. |
Catatan penggunaan
ST_Collect memiliki tiga varian:
Varian 1 — dua input (
g1,g2): Menggabungkan dua objek geometry. Mengembalikan tipe MULTI\* jika kedua input memiliki tipe geometry yang sama, atau GeometryCollection jika tipenya berbeda.Varian 2 — array (
g1Array): Menggabungkan array objek geometry menjadi satu koleksi.Varian 3 — agregat (
g1Field): Berperilaku sebagai fungsi agregat, mengumpulkan semua objek geometry dari suatu rowset menjadi satu objek geometry.
ST_Collect mendukung objek CircularString dan Curve, tetapi mungkin tidak selalu mengembalikan tipe MultiCurve atau MULTI\* yang diharapkan dalam semua kasus.
Jika salah satu input merupakan tipe koleksi (MULTI\* atau GeometryCollection),ST_Collectakan mengembalikan GeometryCollection, bukan tipe MULTI\* yang rata (flat). Untuk mencegah hal ini, gunakanST_Dumpdalam subkueri untuk mengekspansi koleksi input menjadi elemen-elemen atomiknya sebelum memanggilST_Collect.
ST_Collect vs. ST_Union
Kedua fungsi ini menggabungkan objek geometry, tetapi memiliki perilaku yang berbeda:
| Perilaku | ST_Collect | ST_Union |
|---|---|---|
| Menghapus batasan | Tidak | Ya |
| Penanganan LineString | Mengembalikan MultiLineString | Memecah pada perpotongan node |
| Tipe kembalian | MULTI\* atau GeometryCollection | Dapat mengembalikan geometry simple |
| Kinerja | Lebih cepat | Lebih lambat |
Gunakan ST_Collect untuk mengelompokkan geometri tanpa menggabungkan batas-batasnya. Gunakan ST_Union ketika Anda memerlukan geometri yang dilebur menjadi satu geometri terpadu.
Contoh
Varian 1: Dua input
Mengumpulkan dua titik dengan tipe yang sama — mengembalikan MULTIPOINT:
SELECT ST_AsText(ST_Collect('POINT(0 0)'::geometry, 'POINT(0 1)'::geometry));Hasil:
st_astext
---------------------
MULTIPOINT(0 0,0 1)
(1 row)Mengumpulkan geometri dengan tipe berbeda — mengembalikan GeometryCollection:
SELECT ST_AsText(ST_Collect('POINT(0 0)'::geometry, 'LINESTRING(0 2,0 3)'::geometry));Hasil:
st_astext
----------------------------------------------------
GEOMETRYCOLLECTION(POINT(0 0),LINESTRING(0 2,0 3))
(1 row)Varian 3: Agregat
Mengumpulkan semua titik dari subkueri menjadi satu MULTIPOINT:
SELECT ST_AsText(ST_Collect(t.geom))
FROM (
SELECT (ST_DumpPoints(st_buffer('POINT(0 0)'::geometry, 1, 'quad_segs=2'))).geom AS geom
) AS t;Hasil:
st_astext
----------------------------------------------------------------
MULTIPOINT(1 0,0.707106781186548 -0.707106781186547,0 -1,-0.70
7106781186546 -0.707106781186549,-1 0,-0.70710678118655 0.70710
6781186545,0 1,0.707106781186544 0.707106781186551,1 0)
(1 row)