CG_GenerateSkillionRoof — 水平面に投影したポリゴンから片流れ屋根 (一方に傾斜する屋根) を生成します。
geometry CG_GenerateSkillionRoof(geometry geom, float8 height, float8 slope_angle, integer primary_edge_index);
水平面に投影した 2次元ポリゴンから片流れ屋根 (一方に傾斜する屋根) を 3次元 PolyhedralSurface Zとして生成します。屋根表面の傾斜は一方向です。heightで屋根の棟の高さを指定します (デフォルトは3.0)。slope_angleで傾斜角を度単位で指定します (デフォルトは 30)。primary_edge_indexでポリゴンのどの辺を高い側にするかを指定します (0始まり、デフォルトは 0)。
heightとslope_angleの組合せで面が消える (傾斜面が指定高さになる前に対辺に到達する) 時、その面は省略されます。このため出力パッチ数がパラメーターに依存することになります。奥行に比べて指定高さが低いと、高く急な斜面より面が多くなります。
Availability: 3.7.0 - SFCGAL >= 2.3.0 が必要。
このメソッドには SFCGAL バックエンドが必要です。
この関数は多面体サーフェスに対応しています。
高さ 2.0で 6面が生成されます (側壁は全てあります)。高さ 4.0ではフェイスが 5面になります (斜面が指定高さになる前に対辺に到達したので面が一つ消えました)。
SELECT
ST_NumPatches(CG_GenerateSkillionRoof(
'POLYGON((0 0,5 0,5 4,0 4,0 0))', 2.0)) AS "height 2",
ST_NumPatches(CG_GenerateSkillionRoof(
'POLYGON((0 0,5 0,5 4,0 4,0 0))', 4.0)) AS "height 4";
6 | 5
高さ 2.0の結果と接地面。
WITH data AS ( SELECT 'POLYGON((0 0,5 0,5 4,0 4,0 0))'::geometry AS footprint ) SELECT CG_GenerateSkillionRoof(footprint, 2.0) AS roof FROM data;
POLYHEDRALSURFACE Z (((0 4 0,5 4 0,5 0 0,0 0 0,0 4 0)),((5 0 2,5 4 2,3.464 4 2,3.464 0 2,5 0 2)),((0 4 0,0 0 0,3.464 0 2,3.464 4 2,0 4 0)),((0 0 0,5 0 0,5 0 2,3.464 0 2,0 0 0)),((5 0 0,5 4 0,5 4 2,5 0 2,5 0 0)),((5 4 0,0 4 0,3.464 4 2,5 4 2,5 4 0)))