PostGIS计算点集凹壳结果不准 对比QGIS alpha shapes效果差问题问询
PostGIS凹壳计算结果与QGIS差异问题解答
核心原因
- PostGIS 3.1.3依赖的GEOS 3.8.1版本中,
ST_ConcaveHull的实现逻辑与QGIS的「Concave hull (alpha shapes)」完全不同:前者是基于三角剖分的面积占比优化算法,target_percent参数指凹包面积与凸包面积的比值,数值越低凹包越紧凑;后者是标准Alpha Shapes算法,阈值参数为alpha值的缩放比例,两类参数没有对应关系,不能直接套用QGIS的参数值到PostGIS的ST_ConcaveHull中。 - 旧版本GEOS的
ST_ConcaveHull实现对稀疏点云的适配性较差,即便设置极低的target_percent也很难得到贴合点分布的凹包结果。
解决方法
方案一:升级依赖使用对齐算法
将PostGIS升级至3.3及以上版本,同步升级GEOS至3.10及以上版本,使用新增的ST_AlphaShape函数计算凹壳,该函数的实现逻辑与QGIS的Alpha Shapes完全对齐,参数可直接对应调整,示例SQL如下:
CREATE TABLE public.sam_sm_gridded_seismicity_source_09_m4_alpha_01 AS SELECT ST_AlphaShape(ST_Collect(geom), 0.1) FROM ssm_geoms.sam_sm_gridded_seismicity_source_09_m4;
方案二:临时适配现有版本
如果暂时无法升级依赖,可尝试调整ST_ConcaveHull的第三个参数为False(返回单一面),再逐步下调target_percent参数测试,但受限于旧版本算法实现,最终效果大概率仍不如Alpha Shapes贴合预期,也可将点集导出到QGIS计算完成后再导入PostGIS使用。
问题相关原始信息
执行的SQL查询:
CREATE TABLE public.sam_sm_gridded_seismicity_source_09_m4_0_00001 AS SELECT ST_ConcaveHull(ST_Collect(geom), 0.00001, True) FROM ssm_geoms.sam_sm_gridded_seismicity_source_09_m4;效果对比图:
环境配置:
- POSTGIS="3.1.3 008d2db" [EXTENSION] PGSQL="130" GEOS="3.8.1-CAPI-1.13.3" PROJ="8.0.0" LIBXML="2.9.1" LIBJSON="0.15"
- PostgreSQL 13.4 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-44), 64-bit
内容的提问来源于stack exchange,提问作者user2455068
相关产品推荐
相关产品推荐


