PostGIS中提取GeometryCollection内唯一多边形并去除线点的技术求助
问题
我的表中有一个geometry字段,里面存在GeometryCollection类型的数据,包含线、多边形等多种要素,这给我用ST_Intersection处理数据添了不少麻烦。我想把这些GeometryCollection转换成只保留唯一多边形的格式,同时删掉里面的点和线要素。
我自己试了下面这段SQL:
SELECT ST_Union(ST_MakeValid(ST_SnapToGrid(wkb_geometry, 0.0001))) , ST_Union(ST_MakeValid(ST_SnapToGrid(wkb_geometry, 0.0001)))::json as format_json from public.land group by id
执行结果如图:
解决方案
要实现只提取多边形并合并成唯一多边形的需求,可以通过拆解几何集合、筛选类型再合并的方式来处理,具体SQL如下:
SELECT id, ST_Union(ST_MakeValid(ST_SnapToGrid(dmp.geom, 0.0001))) AS cleaned_polygon, ST_Union(ST_MakeValid(ST_SnapToGrid(dmp.geom, 0.0001)))::json AS format_json FROM public.land, LATERAL ST_Dump(wkb_geometry) AS dmp WHERE ST_GeometryType(dmp.geom) IN ('ST_Polygon', 'ST_MultiPolygon') GROUP BY id;
关键步骤说明
ST_Dump:把GeometryCollection拆成单个几何要素,每个要素占一行- 过滤条件:用
ST_GeometryType只保留多边形(包括单个多边形和多多边形),直接排除点、线这类不需要的要素 ST_MakeValid+ST_SnapToGrid:先修复无效几何,再统一坐标精度,避免后续合并出问题ST_Union:把筛选后的多个多边形合并成一个,重叠部分会自动融合
如果你的几何集合里有嵌套的多多边形,ST_Dump会自动拆到最底层的单个多边形,不用担心漏处理。
内容的提问来源于stack exchange,提问作者Bak
相关产品推荐
相关产品推荐

