ST_CoverageClean — きれいな (エッジが合致し、オーバーラップがなく、隙間がない) ポリゴンカバレッジを、きれいでない入力から計算します。
geometry ST_CoverageClean(
geometry winset geom, float8 snappingDistance = -1, float8 gapMaximumWidth = 0, text overlapMergeStrategy = 'MERGE_LONGEST_BORDER')
;
ポリゴンカバレッジのエッジを変更して、ポリゴンのオーバーラップを無くし、隙間をスナップして除き、全ての共有エッジが同じものにすることを確実にするウィンドウ関数です。結果は ST_CoverageInvalidEdgesのような評価関数にパスするクリーンなカバレッジです
gapMaximumWidth
は、ポリゴン間の隙間の除去を制御するためのものです。この許容値より小さい隙間は塞がれます。
snappingDistance
は近隣ノードを一つにまとめるスナップの制御のためのものです。デフォルト設定 (-1) では、入力制御に基づき算出されたスナップ距離が自動的に適用されます。
overlapMergeStrategy
は、オーバーラップ領域をマージする先の近隣ポリゴンの決定に使われるアルゴリズムを制御します。
MERGE_LONGEST_BORDER
共通境界線が最も長いポリゴンを選択します
MERGE_MAX_AREA
最大面積のポリゴンを選択します
MERGE_MIN_AREA
最小面積のポリゴンを選択します
MERGE_MIN_INDEX
入力の要素番号が最も小さいポリゴンを選択します
Availability: 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;