Il tuo problema è probabilmente a causa di ciò che hai incluso nel gruppo per campo.
ST_UNION è una funzione aggregata, il che significa che si sta dissolvendo in base a ciò che si specifica come GROUPparametro.
Ecco cosa hai inserito:
SELECT c.fid, ST_Union(c.boundaryshape) FROM c Group by c.fid,c.boundaryshape;
Secondo questo, stai raggruppando per tuo fid, che è probabilmente un identificatore univoco, e anche per boundaryshape, che è la geometria. Il problema è che è altamente improbabile che le caratteristiche che condividono un ID univoco abbiano geometrie identiche. Pertanto, ST_Unionprobabilmente finirà con qualcosa di simile al seguente:
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
In questo caso, dovresti dissolverti solo in base al tuo identificativo univoco, a meno che tu non abbia effettivamente un numero di geometrie duplicate con lo stesso fid, di cui stai cercando di sbarazzarti. Anche in quella situazione, tuttavia, dovresti solo raggruppare in base a fid, e l'unione si occuperà della duplicazione della geometria.
Vorrei provare quanto segue:
SELECT c.fid, ST_Union(c.boundaryshape) FROM c GROUP BY c.fid;
Ciò dovrebbe darti il risultato desiderato di dissolvere tutte le funzionalità in base all'attributo comune fid.
Ecco il documento di aiuto sul sito PostGIS: ST_Union
Vedi il primo esempio elencato in basso e nota che non include la geometria nel gruppo per sezione.