名前

CG_PolygonRepair — 不正なPOLYGONまたはMULTIPOLYGONを修復します。

概要

geometry CG_PolygonRepair(geometry geom, text rule);

説明

CGALの2次元ポリゴン修復アルゴリズムを用いて不正なPOLYGONまたはMULTIPOLYGONを修復します。MultiPolygonを返します。

ruleパラメーターで修復戦略を制御します。次の通りです:

  • EVEN_ODD (デフォルト) — 重なり回数が奇数の領域が保持されます。CGAL 6.0以上で有効です。

  • NON_ZERO — 回転数が0でない領域が保持されます。CGAL 6.1以上が必要です。

  • UNION —全ての入力ポリゴンの結合。CGAL 6.1以上が必要です。

  • INTERSECTION — 全ての入力ポリゴンの共有部。CGAL 6.1以上が必要です。

Availability: 3.7.0 - SFCGAL >= 2.3.0と CGAL >= 6.0が必要。

このメソッドにはSFCGALバックエンドが必要です。

この関数は多面体サーフェスに対応しています。

Repair a self-intersecting bowtie polygon with the default EVEN_ODD rule.

Code
WITH data AS (
  SELECT 'POLYGON((0 0,2 2,2 0,0 2,0 0))'::geometry AS input_polygon
)
SELECT input_polygon AS input_polygon,
       CG_PolygonRepair(input_polygon) AS repaired_polygon
FROM data;
出力:
POLYGON((0 0,2 2,2 0,0 2,0 0)) | MULTIPOLYGON(((0 0,1 1,0 2,0 0)),((1 1,2 0,2 2,1 1)))
Figure
Geometry figure for visual-cg-polygonrepair-01

With the UNION rule, all winding area is kept. This rule requires CGAL 6.1 or later.

Code
WITH data AS (
  SELECT 'POLYGON((0 0,2 2,2 0,0 2,0 0))'::geometry AS input_polygon
)
SELECT input_polygon AS input_polygon,
       CG_PolygonRepair(input_polygon, 'UNION') AS repaired_polygon
FROM data;
出力:
POLYGON((0 0,2 2,2 0,0 2,0 0)) | MULTIPOLYGON(((0 0,1 1,0 2,0 0)))
Figure
Geometry figure for visual-cg-polygonrepair-02

関連情報

ST_IsValid, ST_MakeValid