ST_CoverageSimplify — ポリゴンカバレッジのエッジを簡略化するウィンドウ関数。
geometry ST_CoverageSimplify(geometry winset geom, float8 tolerance, boolean simplifyBoundary = true);
ポリゴンカバレッジ内でポリゴンのエッジを簡略化するウィンドウ関数です。この簡略化ではカバレッジのトポロジが保持されます。簡略化した出力ポリゴンは共有するエッジに沿って構成され、妥当なカバレッジを形成します。
簡略化では Visvalingam–Whyatt algorithm 版を使います。 tolerance パラメータは距離の単位を持ち、簡略化する三角形面積の平方根とだいたい同じです。
カバレッジの「内部の」エッジ (二つのポリゴンに共有されている)だけを簡略化するには、simplifyBoundary パラメーターを FALSE に設定します。
共有された境界がエッジに合致している時は、隣接ポリゴンレイヤーを簡略化するためにこの関数を使います。自己インターセクションして、リングの評価の問題がある単一ジオメトリーについては ST_SimplifyPreserveTopology を参照して下さい。
|
|
|
入力が妥当なカバレッジでない場合には、出力に予期しない何か (境界のインタセクト、共有されているように見えるのに分かれている境界)が出現する可能性があります。カバレッジが妥当かどうかを判断するにはST_CoverageInvalidEdgesを使います。 |
Availability: 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_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))