名前

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)。

heightslope_angleの組合せで面が消える (傾斜面が指定高さになる前に対辺に到達する)時、その面は省略されます。このため出力パッチ数がパラメーターに依存することになります。奥行に比べて指定高さが低いと、高く急な斜面より面が多くなります。

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

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

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

高さ2.0で6面が生成されます (側壁は全てあります)。高さ4.0ではフェイスが5面になります (斜面が指定高さになる前に対辺に到達したので面が一つ消えました)。

Code
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

The height 2.0 result is shown with its footprint.

Code
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)))
Figure
Geometry figure for visual-cg-generateskillionroof-02