Name

ST_CoverageSimplify — 简化多边形覆盖范围边缘的窗口函数。

Synopsis

geometry ST_CoverageSimplify(geometry winset geom, float8 tolerance, boolean simplifyBoundary = true);

描述

一种窗函数,可简化多边形覆盖范围内的多边形边缘。 简化保留了覆盖拓扑。 这意味着简化的输出多边形沿着共享边是一致的,并且仍然形成有效的覆盖范围。

简化使用了 Visvalingam–Whyatt 算法的格式。 公差参数以距离为单位,大致等于待简化的三角形面积的平方根。

要仅简化 Coverage 的“内部”边缘(由两个多边形共享的边缘),请将 SimplyBoundary 参数设置为 false。

[Note]

如果输入不是有效的覆盖范围,则输出中可能会出现意外的伪影(例如边界交叉点或看似共享的分离边界)。 使用 ST_CoverageInvalidEdges 确定覆盖范围是否有效。

可用性:3.4.0

需要GEOS >= 3.12.0

示例

输入覆盖范围

简化覆盖范围

WITH coverage(id, geom) AS (VALUES
  (1, 'POLYGON ((160 150, 110 130, 90 100, 90 70, 60 60, 50 10, 30 30, 40 50, 25 40, 10 60, 30 100, 30 120, 20 170, 60 180, 90 190, 130 180, 130 160, 160 150), (40 160, 50 140, 66 125, 60 100, 80 140, 90 170, 60 160, 40 160))'::geometry),
  (2, 'POLYGON ((40 160, 60 160, 90 170, 80 140, 60 100, 66 125, 50 140, 40 160))'::geometry),
  (3, 'POLYGON ((110 130, 160 50, 140 50, 120 33, 90 30, 50 10, 60 60, 90 70, 90 100, 110 130))'::geometry),
  (4, 'POLYGON ((160 150, 150 120, 160 90, 160 50, 110 130, 160 150))'::geometry)
)
SELECT id, ST_AsText(ST_CoverageSimplify(geom, 30) OVER ())
  FROM coverage;

 id |               st_astext
----+---------------------------------------
  1 | POLYGON ((160 150, 110 130, 50 10, 10 60, 20 170, 90 190, 160 150), (40 160, 66 125, 90 170, 40 160))
  2 | POLYGON ((40 160, 66 125, 90 170, 40 160))
  3 | POLYGON ((110 130, 160 50, 50 10, 110 130))
  4 | POLYGON ((160 150, 160 50, 110 130, 160 150))