Estoy tratando de lograr un equivalente a la herramienta Disolver de ArcGIS for Desktop usando ST_Union de PostGIS pero parece que no estoy obteniendo el resultado esperado.
Tengo una tabla que tiene ciertos atributos con la geometría del polígono. (como FID, Locstat, Loccnt, Shape)
Aquí está mi consulta:
SELECT c.fid, ST_Union(c.boundaryshape) FROM c Group by c.fid,c.boundaryshape;
Respuestas:
Su problema probablemente se deba a lo que ha incluido en el grupo por campo.
ST_UNION es una función agregada, lo que significa que se está disolviendo en función de lo que especifique como
GROUP
parámetro.Esto es lo que ingresó:
SELECT c.fid, ST_Union(c.boundaryshape) FROM c Group by c.fid,c.boundaryshape;
De acuerdo con esto, está agrupando por su
fid
, que probablemente sea un identificador único, y también porboundaryshape
, que es la geometría. El problema con esto es que es muy poco probable que las características que comparten una ID única tengan geometrías idénticas. Por lo tanto,ST_Union
probablemente terminará con algo como lo siguiente:En este caso, solo debe disolverse en función de su identificador único, a menos que en realidad tenga varias geometrías duplicadas con las mismas
fid
, de las que está tratando de deshacerse. Sin embargo, incluso en esa situación, solo debe agruparse en función defid
, y la unión se encargará de la duplicación de la geometría.Intentaría lo siguiente:
SELECT c.fid, ST_Union(c.boundaryshape) FROM c GROUP BY c.fid;
Eso debería darle el resultado deseado de disolver todas las características basadas en el atributo común
fid
.Aquí está el documento de ayuda en el sitio PostGIS: ST_Union
Vea el primer ejemplo que figura en la parte inferior y observe que no incluye la geometría en el grupo por sección.
fuente