ST_CoverageClean — 对非规范化输入计算出一个规范的多边形覆盖结果(边界匹配、无重叠、无缝隙)。
geometry ST_CoverageClean(
geometry winset geom, float8 snappingDistance = -1, float8 gapMaximumWidth = 0, text overlapMergeStrategy = 'MERGE_LONGEST_BORDER')
;
一个窗口函数,用于调整多边形覆盖的边界,以确保各多边形之间无重叠,微小缝隙被对齐消除,并使所有共享边界完全一致。结果将是一个规范的覆盖图,可通过如 ST_CoverageInvalidEdges 等验证函数的检查
gapMaximumWidth
参数用于控制多边形之间缝隙的清理。小于该容差的缝隙将被自动关闭。
snappingDistance
参数用于控制节点对齐(snapping)操作,即将相近顶点合并为一个点。默认值为 -1,表示自动根据输入数据分析确定对齐距离。若设为 0.0,则完全关闭对齐操作。
overlapMergeStrategy
参数用于控制算法在处理重叠区域时,决定将重叠部分合并到哪个相邻多边形中。
MERGE_LONGEST_BORDER
选取与之具有最长公共边界的多边形进行合并
MERGE_MAX_AREA
选取面积最大的多边形进行合并
MERGE_MIN_AREA
选取面积最小的多边形进行合并
MERGE_MIN_INDEX
选取输入索引值最小的多边形进行合并
可用性: 3.6.0 - 需要 GEOS >= 3.14.0
-- Populate demo table CREATE TABLE example AS SELECT * FROM (VALUES (1, 'POLYGON ((10 190, 30 160, 40 110, 100 70, 120 10, 10 10, 10 190))'::geometry), (2, 'POLYGON ((100 190, 10 190, 30 160, 40 110, 50 80, 74 110.5, 100 130, 140 120, 140 160, 100 190))'::geometry), (3, 'POLYGON ((140 190, 190 190, 190 80, 140 80, 140 190))'::geometry), (4, 'POLYGON ((180 40, 120 10, 100 70, 140 80, 190 80, 180 40))'::geometry) ) AS v(id, geom); -- Prove it is a dirty coverage SELECT ST_AsText(ST_CoverageInvalidEdges(geom) OVER ()) FROM example; -- Clean the coverage CREATE TABLE example_clean AS SELECT id, ST_CoverageClean(geom) OVER () AS GEOM FROM example; -- Prove it is a clean coverage SELECT ST_AsText(ST_CoverageInvalidEdges(geom) OVER ()) FROM example_clean;