名称

ST_CoverageSimplify — 简化多边形覆盖边界的窗口函数。

语法

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

描述

一个窗口函数,用于简化多边形覆盖中多边形的边界。简化会保留覆盖拓扑。这意味着简化的输出多边形沿着共享的边界保持一致,并且仍形成一个有效的覆盖。

简化使用 Visvalingam–Whyatt 算法 的一个变体。 tolerance 参数的单位是距离,并且大致等于要简化的三角形区域的平方根。

要仅简化覆盖的“内部”边界(由两个多边形共享的边界),请将 simplifyBoundary 参数设置为 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))
  3 | POLYGON ((160 150, 160 50, 110 130, 160 150))
      

另请参见

ST_CoverageInvalidEdges