CG_GenerateSkillionRoof — Generera ett pulpettak (med en taklutning) från en fotavtryckspolygon.
geometry CG_GenerateSkillionRoof(geometry geom, float8 height, float8 slope_angle, integer primary_edge_index);
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.
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).
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
Resultatet för höjden 2.0 visas med sitt fotavtryck.
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)))