Estou tentando obter um equivalente à ferramenta Dissolve do ArcGIS for Desktop usando ST_Union do PostGIS, mas parece que não estou obtendo o resultado esperado.
Eu tenho uma tabela que tem certos atributos com a geometria de polígono. (como FID, Locstat, Loccnt, Shape)
Aqui está a minha consulta:
SELECT c.fid, ST_Union(c.boundaryshape) FROM c Group by c.fid,c.boundaryshape;
Respostas:
É 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 porboundaryshape
, 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: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 emfid
, 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.
fonte