Name

ST_RemoveSmallParts — Tar bort små delar (polygonringar eller linestrings) av en geometri.

Synopsis

geometry ST_RemoveSmallParts(geometry geom, double precision minSizeX, double precision minSizeY);

Beskrivning

Returnerar en geometry utan små delar (yttre eller inre polygonringar eller linestrings).

Denna funktion kan användas som ett förbehandlingssteg för att skapa förenklade kartor, t.ex. för att ta bort små öar eller hål.

Den utvärderar endast geometrier av typen (MULTI)POLYGON och (MULTI)LINESTRING. Andra geometrier förblir oförändrade.

Om minSizeX är större än 0 sorteras delar ut om deras bredd är mindre än minSizeX.

Om minSizeY är större än 0 sorteras delar ut om deras höjd är mindre än minSizeY.

Både minSizeX och minSizeY mäts i geometrins koordinatsystemenheter.

För polygontyper görs utvärderingen separat för varje ring, vilket kan leda till något av följande resultat:

  • den ursprungliga geometrin,

  • en POLYGON med alla ringar som har färre toppar,

  • en POLYGON med ett reducerat antal inre ringar (som eventuellt har färre toppar),

  • en POLYGON EMPTY, eller

  • en MULTIPOLYGON med ett reducerat antal polygoner (som eventuellt har färre inre ringar eller hörn), eller

  • en MULTIPOLYGON EMPTY.

För linestringstyper görs utvärderingen för varje linestrings, vilket kan leda till något av följande resultat:

  • den ursprungliga geometrin,

  • en LINESTRING med ett reducerat antal toppar,

  • a LINESTRING EMPTY,

  • en MULTILINESTRING med ett reducerat antal linestringsar (som eventuellt har färre toppar), eller

  • en MULTILINESTRING EMPTY.

Exempel: ST_RemoveSmallParts() tillämpas på en multipolygon. Blå delar kvarstår.

Tillgänglighet: 3.5.0

Exempel

SELECT ST_AsText(
                        ST_RemoveSmallParts(
                        ST_GeomFromText('MULTIPOLYGON(
                                ((60 160, 120 160, 120 220, 60 220, 60 160), (70 170, 70 210, 110 210, 110 170, 70 170)),
                                ((85 75, 155 75, 155 145, 85 145, 85 75)),
                                ((50 110, 70 110, 70 130, 50 130, 50 110)))'),
                                50, 50));
                
                st_astext
                ---------
                        MULTIPOLYGON(((60 160,120 160,120 220,60 220,60 160)),((85 75,155 75,155 145,85 145,85 75)))
                
SELECT ST_AsText(
                        ST_RemoveSmallParts(
                        ST_GeomFromText('LINESTRING(10 10, 20 20)'),
                                50, 50));
                
                st_astext
                ---------
                        LINESTRING EMPTY