如何使用ST_Union等效于从ArcGIS for Desktop溶解?


11

我正在尝试使用PostGIS的ST_Union实现与ArcGIS for Desktop的Dissolve工具等效的功能,但似乎没有得到预期的结果。

我有一张表格,该表格具有“多边形几何”的某些属性。(如FID,Locstat,Loccnt,Shape)

这是我的查询:

SELECT c.fid, ST_Union(c.boundaryshape) FROM c Group by c.fid,c.boundaryshape;

1
您能解释一下您期望得到什么结果吗?运行:SELECT AsText(ST_Union ...)FROM ...可能有助于查找错误。
Micha 2013年

在表中,我有6842条记录,根据ArcGIS结果,我应该获得1683条记录,而使用查询时,我将获得6842条记录。我还尝试了ST_Aggr_Union,它为我提供了742条具有多个空Geometry的记录。
Dhams

Answers:


14

您的问题很可能是由于您包含在“分组依据”字段中。

ST_UNION是一个聚合函数,这意味着它将根据您指定为GROUP参数的形式进行分解。

这是您输入的内容:

SELECT c.fid, ST_Union(c.boundaryshape) FROM c Group by c.fid,c.boundaryshape;

据此,您将根据分组fid,这可能是唯一的标识符,也按进行分组boundaryshape,这是几何。问题在于,共享唯一ID的要素极不可能具有相同的几何形状。因此,ST_Union最终可能会出现以下内容:

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

在这种情况下,除非您实际上有许多fid要消除的具有相同重复的几何图形,否则您应该仅基于唯一标识进行分解。即使在那种情况下,您也只需要基于进行分组fid,联合将负责处理几何图形重复项。

我会尝试以下方法:

SELECT c.fid, ST_Union(c.boundaryshape) FROM c GROUP BY c.fid;

这应该为您提供基于common属性分解所有功能的理想结果fid

这是PostGIS站点上的帮助文档: ST_Union

请参见底部列出的第一个示例,请注意,该示例按组不包含几何。


1
在某些情况下,最好在执行合并之前将几何捕捉到网格:SELECT ST_Union(ST_SnapToGrid(geom,0.0001))从geo_area中按level_identifier分组;
Maxim Eliseev 2013年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.