ST_CoverageClean — きれいな (エッジが合致し、オーバーラップがなく、隙間がない) ポリゴンカバレッジを、きれいでない入力から計算します。
geometry ST_CoverageClean(geometry winset geom, float8 gapMaximumWidth = 0, float8 snappingDistance = -1, text overlapMergeStrategy = 'MERGE_LONGEST_BORDER');
妥当なポリゴン系ジオメトリーの集合のエッジを調整して、きれいなカバレッジを生成するウィンドウ関数です。きれいにする処理には次を含みます:
小さな不一致を取り除き、共有されるエッジに同じようにノードが打たれるのを確実にするために、頂点とエッジをスナップさせる
オーバーラップするポリゴンをひとつの親ポリゴンとしてマージする
小さい隙間を隣接ポリゴンとしてマージする
gapMaximumWidthでポリゴンをマージする隙間の条件を制御します。隙間の幅がこの値以下なら隣接ポリゴンとしてマージします。
snappingDistanceで頂点とエッジのスナップを制御します。デフォルト (-1)では自動的にスナップ距離が入力の範囲に応じて決定されます。0.0が指定されるとスナップを行いません。
overlapMergeStrategyでどれぐらいのオーバーラップまで親ポリゴンとしてマージするかが指定されます:
MERGE_LONGEST_BORDER - 最長共有境界でマージします
MERGE_MAX_AREA - 最大面積でマージします
MERGE_MIN_AREA - 最小面積でマージします
MERGE_MIN_INDEX - 入力インデックス (入力ポリゴンの順番で決まります)の最小値でマージします
結果はきれいなポリゴンカバレッジで、ST_CoverageInvalidEdgesが通り、カバレッジ処理関数の入力にすることができます。
|
|
|
最大隙間幅の判定を助けるために、 |
Availability: 3.6.0 - GEOS >= 3.14.0が必要です
-- Populate input table CREATE TABLE example AS SELECT * FROM (VALUES (1, 'POLYGON ((10 190, 30 160, 27 134.5, 40 110, 122 47, 120 10, 10 10, 10 190))'::geometry), (2, 'POLYGON ((150 190, 10 190, 30 160, 50 140, 40 110, 50 80, 130 70, 135 111, 140 130, 140 160, 150 190))'::geometry), (3, 'POLYGON ((140 190, 190 190, 190 80, 140 80, 140 190))'::geometry), (4, 'POLYGON ((190 10, 120 10, 97 77, 160 90, 170 70, 190 80, 190 10))'::geometry) ) AS v(id, geom);
重複部と隙間があるポリゴン
-- Show it is an invalid coverage SELECT ST_AsText(ST_CoverageInvalidEdges(geom) OVER ()) FROM example;
不正なカバレッジのエッジ
-- Clean the coverage, merging gaps with width <= 1 CREATE TABLE example_clean AS SELECT id, ST_CoverageClean(geom, 1) OVER () AS GEOM FROM example;
重複部と狭い隙間の消去でポリゴンカバレッジをきれいにします