在Qgis或Postgres中合并非相邻的多边形

3
我正在使用Qgis和PostgreSQL。但是我不知道如何将截图中的非相邻多边形合并为一个记录?有人可以帮助我解决这个问题吗?
我想要所有具有相同cat的多边形合并为一个记录。
请在此处查看截图:

enter image description here

谢谢

1个回答

1
如果你想使用Postgres,你需要创建一个SELECT,并使用ST_Union
geometry ST_Union(geometry set g1field);

geometry ST_Union(geometry g1, geometry g2);

geometry ST_Union(geometry[] g1_array);

你可以尝试这个方法来创建一个数组。 使用PostgreSQL的SQL将多行连接成一个数组 我在我的状态表中尝试了这个方法,效果不错。
SELECT ST_Union(a_geom)
FROM  (SELECT  array_agg(e.geom) as a_geom 
       FROM mapas.estadosven_region e
      ) t

我做了另一个测试,看起来这个也可能有效。

SELECT ID, ST_Union(geom) 
FROM test_dissolve_function t 
WHERE ST_isValid(geom)='t' 
GROUP BY ID;

谢谢回复,Juan!我查了一下,到目前为止我有这个,但是如何显示cat列呢?SELECT geom, ST_multi(ST_Union(f.geom)), cat FROM test_dissolve_function As f GROUP BY geom - L. Grunn
看起来是你的数据有问题。在我的情况下,我确定州边界不是精确的,所以也会发生一些交叉。你可以尝试先仅连接两个简单对象,而不是整个表格?使用ST_Union的第一个签名。此外,你可以将函数封装为类似于join_mygeom(id)的东西,这样你就可以找到哪个连接出错了。如果有任何错误,使函数返回-1。 - Juan Carlos Oropeza
尝试使用ST_IsValidDetail。但这应该是一个不同的问题。http://postgis.net/docs/ST_IsValidDetail.html - Juan Carlos Oropeza
除非您先备份数据,否则不要这样做。或者创建一个新表。但是再次提醒您可以使用ST_UNION ..... Where ST_isValid(geom) - Juan Carlos Oropeza
现在我的查询看起来像这样:SELECT ST_Union(geom) FROM (SELECT array_agg(test_dissolve_function.geom) as geom FROM test_dissolve_function WHERE ST_isValid(geom)='t' )t; 但它只返回一行。我做错了什么? - L. Grunn
显示剩余9条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接