Ваша проблема, ймовірно, пов’язана з тим, що ви включили до групи по полях.
ST_UNION - це сукупна функція, що означає, що вона розчиняється на основі того, що ви вказали як GROUP
параметр.
Ось що ви ввели:
SELECT c.fid, ST_Union(c.boundaryshape) FROM c Group by c.fid,c.boundaryshape;
Відповідно до цього, ви групуєтесь за вашим fid
, який, мабуть, є унікальним ідентифікатором, а також за boundaryshape
геометрією. Проблема в цьому полягає в тому, що малоймовірно, що функції, що мають спільний унікальний ідентифікатор, матимуть однакову геометрію. Тому, ST_Union
мабуть, закінчиться щось подібне:
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
У такому випадку вам слід розчинитись лише на основі свого унікального ідентифікатора, якщо ви насправді не маєте декількох дублікатів геометрії з тією самою fid
, якої ви намагаєтеся позбутися. Навіть у цій ситуації вам слід лише групуватися на основі fid
, і союз подбає про дублювання геометрії.
Я б спробував таке:
SELECT c.fid, ST_Union(c.boundaryshape) FROM c GROUP BY c.fid;
Це повинно дати вам бажаний результат розчинення всіх функцій на основі загального атрибута fid
.
Ось довідковий документ на сайті PostGIS: ST_Union
Дивіться перший приклад, наведений внизу, і зауважте, що він не включає геометрію в групі за розділом.