CG_AlphaShape — Beräknar en Alpha-form som omsluter en geometri
geometry CG_AlphaShape(
geometry geom, float alpha, boolean allow_holes = false)
;
Beräknar Alpha-Shape för punkterna i en geometri. En alfa-form är en (vanligtvis) konkav polygonal geometri som innehåller alla indatavärdenas hörnpunkter och vars hörnpunkter är en delmängd av indatavärdenas hörnpunkter. En alfa-form ger en bättre anpassning till indatans form än den form som produceras av det konvexa skrovet.
"Passningsgraden" styrs av alfaparametern
, som kan ha värden från 0 till oändligt. Mindre alfavärden ger mer konkava resultat. Alphavärden som är större än ett visst databeroende värde ger ett konvext skrov av indata.
![]() |
|
Enligt CGAL-implementeringen är alfavärdet kvadraten på radien på den skiva som används i Alpha-Shape-algoritmen för att "erodera" Delaunay-trianguleringen av inmatningspunkterna. Se CGAL Alpha-Shapes för mer information. Detta skiljer sig från den ursprungliga definitionen av alpha-former, som definierar alfa som radien på den eroderande skivan. |
Den beräknade formen innehåller inga hål om inte det valfria argumentet allow_holes
anges som true.
Denna funktion beräknar effektivt ett konkavt skrov av en geometri på ett liknande sätt som ST_ConcaveHull, men använder CGAL och en annan algoritm.
Tillgänglighet: 3.5.0 - kräver SFCGAL >= 1.4.1.
Denna metod behöver SFCGAL-backend.
Alfa-form för en MultiPoint (samma exempel som CG_OptimalAlphaShape)
SELECT ST_AsText(CG_AlphaShape('MULTIPOINT((63 84),(76 88),(68 73),(53 18),(91 50),(81 70), (88 29),(24 82),(32 51),(37 23),(27 54),(84 19),(75 87),(44 42),(77 67),(90 30),(36 61),(32 65), (81 47),(88 58),(68 73),(49 95),(81 60),(87 50), (78 16),(79 21),(30 22),(78 43),(26 85),(48 34),(35 35),(36 40),(31 79),(83 29),(27 84),(52 98),(72 95),(85 71), (75 84),(75 77),(81 29),(77 73),(41 42),(83 72),(23 36),(89 53),(27 57),(57 97),(27 77),(39 88),(60 81), (80 72),(54 32),(55 26),(62 22),(70 20),(76 27),(84 35),(87 42),(82 54),(83 64),(69 86),(60 90),(50 86),(43 80),(36 73), (36 68),(40 75),(24 67),(23 60),(26 44),(28 33),(40 32),(43 19),(65 16),(73 16),(38 46),(31 59),(34 86),(45 90),(64 97))'::geometry,80.2));
POLYGON((89 53,91 50,87 42,90 30,88 29,84 19,78 16,73 16,65 16,53 18,43 19, 37 23,30 22,28 33,23 36,26 44,27 54,23 60,24 67,27 77, 24 82,26 85,34 86,39 88,45 90,49 95,52 98,57 97, 64 97,72 95,76 88,75 84,83 72,85 71,88 58,89 53))
Alfa-form av en MultiPoint, som tillåter hål (samma exempel som CG_OptimalAlphaShape)
SELECT ST_AsText(CG_AlphaShape('MULTIPOINT((63 84),(76 88),(68 73),(53 18),(91 50),(81 70),(88 29),(24 82),(32 51),(37 23),(27 54),(84 19),(75 87),(44 42),(77 67),(90 30),(36 61),(32 65),(81 47),(88 58),(68 73),(49 95),(81 60),(87 50), (78 16),(79 21),(30 22),(78 43),(26 85),(48 34),(35 35),(36 40),(31 79),(83 29),(27 84),(52 98),(72 95),(85 71), (75 84),(75 77),(81 29),(77 73),(41 42),(83 72),(23 36),(89 53),(27 57),(57 97),(27 77),(39 88),(60 81), (80 72),(54 32),(55 26),(62 22),(70 20),(76 27),(84 35),(87 42),(82 54),(83 64),(69 86),(60 90),(50 86),(43 80),(36 73), (36 68),(40 75),(24 67),(23 60),(26 44),(28 33),(40 32),(43 19),(65 16),(73 16),(38 46),(31 59),(34 86),(45 90),(64 97))'::geometry, 100.1,true))
POLYGON((89 53,91 50,87 42,90 30,84 19,78 16,73 16,65 16,53 18,43 19,30 22,28 33,23 36, 26 44,27 54,23 60,24 67,27 77,24 82,26 85,34 86,39 88,45 90,49 95,52 98,57 97,64 97,72 95, 76 88,75 84,83 72,85 71,88 58,89 53),(36 61,36 68,40 75,43 80,60 81,68 73,77 67, 81 60,82 54,81 47,78 43,76 27,62 22,54 32,44 42,38 46,36 61))
Alfa-form av en MultiPoint, som tillåter hål (samma exempel som ST_ConcaveHull)
SELECT ST_AsText(CG_AlphaShape( 'MULTIPOINT ((132 64), (114 64), (99 64), (81 64), (63 64), (57 49), (52 36), (46 20), (37 20), (26 20), (32 36), (39 55), (43 69), (50 84), (57 100), (63 118), (68 133), (74 149), (81 164), (88 180), (101 180), (112 180), (119 164), (126 149), (132 131), (139 113), (143 100), (150 84), (157 69), (163 51), (168 36), (174 20), (163 20), (150 20), (143 36), (139 49), (132 64), (99 151), (92 138), (88 124), (81 109), (74 93), (70 82), (83 82), (99 82), (112 82), (126 82), (121 96), (114 109), (110 122), (103 138), (99 151), (34 27), (43 31), (48 44), (46 58), (52 73), (63 73), (61 84), (72 71), (90 69), (101 76), (123 71), (141 62), (166 27), (150 33), (159 36), (146 44), (154 53), (152 62), (146 73), (134 76), (143 82), (141 91), (130 98), (126 104), (132 113), (128 127), (117 122), (112 133), (119 144), (108 147), (119 153), (110 171), (103 164), (92 171), (86 160), (88 142), (79 140), (72 124), (83 131), (79 118), (68 113), (63 102), (68 93), (35 45))'::geometry,102.2, true));
POLYGON((26 20,32 36,35 45,39 55,43 69,50 84,57 100,63 118,68 133,74 149,81 164,88 180, 101 180,112 180,119 164,126 149,132 131,139 113,143 100,150 84,157 69,163 51,168 36, 174 20,163 20,150 20,143 36,139 49,132 64,114 64,99 64,90 69,81 64,63 64,57 49,52 36,46 20,37 20,26 20), (74 93,81 109,88 124,92 138,103 138,110 122,114 109,121 96,112 82,99 82,83 82,74 93))