名稱

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))
  4 | POLYGON ((160 150, 160 50, 110 130, 160 150))