Вероятно, ваша проблема связана с тем, что вы включили в группу по полю.
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
Посмотрите на первый пример, приведенный внизу, и обратите внимание, что он не включает геометрию в группе по разделам.