Name

ST_SimplifyPolygonHull — Beräknar ett förenklat topologibevarande yttre eller inre skrov av en polygonal geometri.

Synopsis

geometry ST_SimplifyPolygonHull(geometry param_geom, float vertex_fraction, boolean is_outer = true);

Beskrivning

Beräknar ett förenklat topologibevarande yttre eller inre skrov av en polygonal geometri. Ett yttre skrov täcker helt inmatningsgeometrin. Ett inre skrov täcks helt av indatageometrin. Resultatet är en polygonal geometri som bildas av en delmängd av de ingående hörnen. MultiPolygoner och hål hanteras och ger ett resultat med samma struktur som indata.

Minskningen av antalet toppar styrs av parametern vertex_fraction, som är ett tal i intervallet 0 till 1. Lägre värden ger enklare resultat, med mindre antal vertex och mindre konkavitet. För både yttre och inre skrov ger en vertexfraktion på 1,0 den ursprungliga geometrin. För yttre skrov ger ett värde på 0,0 det konvexa skrovet (för en enda polygon); för inre skrov ger det en triangel.

Förenklingsprocessen fungerar genom att gradvis ta bort konkava hörn som innehåller minst yta, tills målet för antalet vertex har uppnåtts. Det förhindrar att kanter korsar varandra, så resultatet är alltid en giltig polygonal geometri.

För att få bättre resultat med geometrier som innehåller relativt långa linjesegment kan det vara nödvändigt att "segmentisera" indata, enligt nedan.

Utförs av GEOS-modulen.

Tillgänglighet: 3.3.0.

Kräver GEOS >= 3.11.0.

Exempel

Yttre skrov av en polygon

SELECT ST_SimplifyPolygonHull(
  'POLYGON ((131 158, 136 163, 161 165, 173 156, 179 148, 169 140, 186 144, 190 137, 185 131, 174 128, 174 124, 166 119, 158 121, 158 115, 165 107, 161 97, 166 88, 166 79, 158 57, 145 57, 112 53, 111 47, 93 43, 90 48, 88 40, 80 39, 68 32, 51 33, 40 31, 39 34, 49 38, 34 38, 25 34, 28 39, 36 40, 44 46, 24 41, 17 41, 14 46, 19 50, 33 54, 21 55, 13 52, 11 57, 22 60, 34 59, 41 68, 75 72, 62 77, 56 70, 46 72, 31 69, 46 76, 52 82, 47 84, 56 90, 66 90, 64 94, 56 91, 33 97, 36 100, 23 100, 22 107, 29 106, 31 112, 46 116, 36 118, 28 131, 53 132, 59 127, 62 131, 76 130, 80 135, 89 137, 87 143, 73 145, 80 150, 88 150, 85 157, 99 162, 116 158, 115 165, 123 165, 122 170, 134 164, 131 158))',
    0.3);

Innerskrov av en polygon

SELECT ST_SimplifyPolygonHull(
  'POLYGON ((131 158, 136 163, 161 165, 173 156, 179 148, 169 140, 186 144, 190 137, 185 131, 174 128, 174 124, 166 119, 158 121, 158 115, 165 107, 161 97, 166 88, 166 79, 158 57, 145 57, 112 53, 111 47, 93 43, 90 48, 88 40, 80 39, 68 32, 51 33, 40 31, 39 34, 49 38, 34 38, 25 34, 28 39, 36 40, 44 46, 24 41, 17 41, 14 46, 19 50, 33 54, 21 55, 13 52, 11 57, 22 60, 34 59, 41 68, 75 72, 62 77, 56 70, 46 72, 31 69, 46 76, 52 82, 47 84, 56 90, 66 90, 64 94, 56 91, 33 97, 36 100, 23 100, 22 107, 29 106, 31 112, 46 116, 36 118, 28 131, 53 132, 59 127, 62 131, 76 130, 80 135, 89 137, 87 143, 73 145, 80 150, 88 150, 85 157, 99 162, 116 158, 115 165, 123 165, 122 170, 134 164, 131 158))',
    0.3, false);

Förenkling av ytterskalet på en MultiPolygon, med segmentisering

SELECT ST_SimplifyPolygonHull(
  ST_Segmentize(ST_Letters('xt'), 2.0),
    0.1);