Namn

CG_GenerateSkillionRoof — Generera ett pulpettak (med en taklutning) från en fotavtryckspolygon.

Synopsis

geometry CG_GenerateSkillionRoof(geometry geom, float8 height, float8 slope_angle, integer primary_edge_index);

Beskrivning

Generera ett pulpettak (med en taklutning) som en 3D-PolyhedralSurface Z från en 2D-fotavtryckspolygon. Hela takytan lutar i en riktning. height anger den maximala nockhöjden (standard 3.0), slope_angle anger lutningen i grader (standard 30.0) och primary_edge_index väljer vilken polygonkant som definierar den höga sidan (index från 0, standard 0).

När kombinationen av height och slope_angle skulle få en sidovägg att försvinna (lutningen når den bortre kanten innan full höjd uppnås) utelämnas den ytan från resultatet. Detta innebär att antalet utdataytor kan variera beroende på parametrarna — en lägre höjd i förhållande till fotavtryckets djup ger fler ytor än en högre, brantare konfiguration.

Tillgänglighet: 3.7.0 – kräver SFCGAL >= 2.3.0.

Denna metod behöver SFCGAL-backend.

Denna funktion stöder polyedriska ytor.

Exempel

Höjden 2.0 ger 6 ytor (alla väggar finns); höjden 4.0 ger 5 ytor (en sidovägg filtreras bort eftersom lutningen når den bortre kanten före full höjd).

Kod
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";
Utdata
6 | 5

Resultatet för höjden 2.0 visas med sitt fotavtryck.

Kod
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;
Utdata
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)))
Figur
Geometry figure for visual-cg-generateskillionroof-02