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 GROUPparameter.
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_Unionmungkin 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.