É provável que seu problema seja devido ao que você incluiu no grupo por campo.
ST_UNION é uma função agregada, o que significa que está se dissolvendo com base no que você especifica como GROUP
parâmetro.
Aqui está o que você digitou:
SELECT c.fid, ST_Union(c.boundaryshape) FROM c Group by c.fid,c.boundaryshape;
De acordo com isso, você está agrupando por seu fid
, que provavelmente é um identificador exclusivo, e também por boundaryshape
, que é a geometria. O problema é que é altamente improvável que os recursos que compartilham um ID exclusivo tenham geometrias idênticas. Portanto, ST_Union
provavelmente terminará com algo como o seguinte:
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
Nesse caso, você deve se dissolver apenas com base no seu identificador exclusivo, a menos que você tenha um número de geometrias duplicadas com o mesmo fid
, do qual está tentando se livrar. Mesmo nessa situação, você só precisa agrupar com base em fid
, e a união cuidará da duplicação da geometria.
Eu tentaria o seguinte:
SELECT c.fid, ST_Union(c.boundaryshape) FROM c GROUP BY c.fid;
Isso deve fornecer o resultado desejado da dissolução de todos os recursos com base no atributo comum fid
.
Aqui está o documento de ajuda no site PostGIS: ST_Union
Veja o primeiro exemplo listado na parte inferior e observe que ele não inclui a geometria no grupo por seção.