ST_CoverageSimplify — 简化多边形覆盖范围边缘的窗口函数。
geometry ST_CoverageSimplify(
geometry winset geom, float8 tolerance, boolean simplifyBoundary = true)
;
一个窗口函数,用于简化多边形覆盖范围中多边形的边缘。简化过程会保留覆盖范围的拓扑结构。这意味着简化后的输出多边形在共享边缘处保持一致,并且仍然构成有效的覆盖范围。
简化过程使用 Visvalingam–Whyatt 算法的变体。tolerance
参数的单位是距离,大致等于要简化的三角形面积的平方根。
要仅简化覆盖范围的“内部”边缘(即由两个多边形共享的边缘),请将 simplifyBoundary
参数设置为 false。
如果输入不是有效的覆盖范围,则输出中可能会出现意外的伪像(例如边界交叉,或看起来是共享但实际分离的边界)。使用 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))