Name

ST_CoverageClean — 对非规范化输入计算出一个规范的多边形覆盖结果(边界匹配、无重叠、无缝隙)。

Synopsis

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;