Twój problem prawdopodobnie wynika z tego, co umieściłeś w grupie według pola.
ST_UNION jest funkcją agregującą, co oznacza, że rozpuszcza się na podstawie tego, co podasz jako GROUP
parametr.
Oto, co wpisałeś:
SELECT c.fid, ST_Union(c.boundaryshape) FROM c Group by c.fid,c.boundaryshape;
Zgodnie z tym grupujesz według swojego fid
, który jest prawdopodobnie unikalnym identyfikatorem, a także według boundaryshape
, która jest geometrią. Problem polega na tym, że jest mało prawdopodobne, aby funkcje o unikalnym identyfikatorze miały identyczną geometrię. Dlatego ST_Union
prawdopodobnie zakończy się czymś takim:
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
W takim przypadku powinieneś rozpuścić się na podstawie swojego unikalnego identyfikatora, chyba że faktycznie masz wiele zduplikowanych geometrii o tej samej nazwie fid
, których próbujesz się pozbyć. Nawet w tej sytuacji powinieneś tylko grupować w oparciu o fid
, a związek zajmie się duplikacją geometrii.
Spróbowałbym następujących rzeczy:
SELECT c.fid, ST_Union(c.boundaryshape) FROM c GROUP BY c.fid;
To powinno dać pożądany rezultat rozpuszczenia wszystkich funkcji w oparciu o wspólny atrybut fid
.
Oto dokument pomocy na stronie PostGIS: ST_Union
Zobacz pierwszy przykład wymieniony na dole i zauważ, że nie obejmuje on geometrii w grupie według sekcji.