Masalah Anda kemungkinan karena apa yang Anda sertakan dalam grup dengan bidang.
ST_UNION adalah fungsi agregat, artinya dibubarkan berdasarkan apa yang Anda tentukan sebagai GROUP
parameter.
Inilah yang Anda masukkan:
SELECT c.fid, ST_Union(c.boundaryshape) FROM c Group by c.fid,c.boundaryshape;
Menurut ini, Anda mengelompokkan menurut Anda fid
, yang mungkin merupakan pengidentifikasi unik, dan juga oleh boundaryshape
, yang merupakan geometri. Masalah dengan ini adalah bahwa sangat tidak mungkin bahwa fitur berbagi ID unik, akan memiliki geometri yang identik. Oleh karena itu, ST_Union
mungkin akan berakhir dengan sesuatu seperti berikut ini:
Input:
fid boundaryshape
1 11
1 12
1 11
1 13
2 12
2 13
2 12
3 5
3 2
3 4
Output:
fid boundaryshape
1 (11 + 11)
1 12
1 13
2 (12 + 12)
2 13
3 2
3 4
3 5
Dalam hal ini, Anda hanya boleh dibubarkan berdasarkan pengenal unik Anda, kecuali Anda benar-benar memiliki sejumlah geometri duplikat dengan yang sama fid
, yang Anda coba singkirkan. Bahkan dalam situasi itu, Anda hanya perlu mengelompokkan berdasarkan fid
, dan serikat akan mengurus duplikasi geometri.
Saya akan mencoba yang berikut:
SELECT c.fid, ST_Union(c.boundaryshape) FROM c GROUP BY c.fid;
Itu akan memberi Anda hasil yang diinginkan melarutkan semua fitur berdasarkan atribut umum fid
.
Ini dokumen bantuan di situs PostGIS: ST_Union
Lihat contoh pertama yang tercantum di bagian bawah dan perhatikan bahwa itu tidak termasuk geometri di bagian grup.