名前

CG_StraightSkeleton — ジオメトリーからストレートスケルトンを計算します。

概要

geometry CG_StraightSkeleton(geometry geom, boolean use_distance_as_m = false);

説明

エッジの内側への伝播の追跡によってポリゴンのストレートスケルトンを計算します。use_distance_as_mTRUE の場合には、 出力ポイントごとの M 値は入力が持つ境界からの距離を保存します。

Availability: 3.5.0

任意引数 use_distance_as_m を使用するには SFCGAL >= 1.3.8が必要です

[注記]

この関数は Z 値を無視します。この関数を 3次元ジオメトリー上で使用したとしても、常に 2次元の結果となります。

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

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

この関数は三角形と不規則三角網 (TIN) に対応しています。

コード
WITH data AS (
  SELECT 'POLYGON((190 190,10 190,10 10,190 10,190 20,160 30,60 30,60 130,190 140,190 190))'::geometry AS polygon
)
SELECT CG_StraightSkeleton(polygon) AS straight_skeleton
FROM data;
出力
MULTILINESTRING((190 190,164.03987973986756 164.03987973986756),(10 190,40.697077206292434 159.30292279370755),(10 10,35 35),(190 10,184.18861169915812 15.811388300841896),(190 20,184.18861169915812 15.811388300841896),(160 30,158.3772233983162 20),(60 30,50 20),(60 130,35 153.15077848154866),(190 140,164.03987973986756 164.03987973986756),(184.18861169915812 15.811388300841896,158.3772233983162 20),(50 20,158.3772233983162 20),(50 20,35 35),(35 153.15077848154866,35 35),(35 153.15077848154866,40.697077206292434 159.30292279370755),(164.03987973986756 164.03987973986756,40.697077206292434 159.30292279370755))
Geometry figure for visual-cg-straightskeleton-01
コード
WITH data AS (
  SELECT 'POLYGON((0 0,1 0,1 1,0 1,0 0))'::geometry AS polygon
)
SELECT CG_StraightSkeleton(polygon, true) AS straight_skeleton_with_m
FROM data;
出力
MULTILINESTRING M ((0 0 0,0.5 0.5 0.5),(1 0 0,0.5 0.5 0.5),(1 1 0,0.5 0.5 0.5),(0 1 0,0.5 0.5 0.5))
Geometry figure for visual-cg-straightskeleton-02

リング同士が 1点で接触する妥当な入力ではエラーが発生することに注意してください。

コード
SELECT CG_StraightSkeleton('POLYGON((0 0,3 0,3 3,0 3,0 0),(0 0,1 2,2 1,0 0))'));
出力
NOTICE:  During straight_skeleton(A) :
NOTICE:    with A: POLYGON((0/1 0/1,3/1 0/1,3/1 3/1,0/1 3/1,0/1 0/1),(0/1 0/1,1/1 2/1,2/1 1/1,0/1 0/1))
ERROR:  straight skeleton of Polygon with point touching rings is not implemented.