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 GROUP
parametro.
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_Union
probabilmente 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.