Name

ST_RemoveSmallParts — Entfernt kleine Teile (Polygonringe oder Linienzüge) einer Geometrie.

Synopsis

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

Beschreibung

Gibt eine geometry ohne kleine Teile (äußere oder innere Polygonringe oder Linienzüge) zurück.

Diese Funktion kann als Vorverarbeitungsschritt zur Erstellung vereinfachter Karten verwendet werden, z. B. um kleine Inseln oder Löcher zu entfernen.

Es wertet nur Geometrien vom Typ (MULTI)POLYGON und (MULTI)LINESTRING aus. Andere Geometrien bleiben unverändert.

Wenn minSizeX größer als 0 ist, werden Teile ausgeschlossen, wenn ihre Breite kleiner als minSizeX ist.

Wenn minSizeY größer als 0 ist, werden Teile ausgeschlossen, wenn ihre Höhe kleiner als minSizeY ist.

Sowohl minSizeX als auch minSizeY werden in den Koordinatensystemeinheiten der Geometrie gemessen.

Bei Polygonen wird die Auswertung für jeden Ring getrennt vorgenommen, was zu einem der folgenden Ergebnisse führen kann:

  • die ursprüngliche Geometrie,

  • ein POLYGON mit allen Ringen, die weniger Scheitelpunkte haben

  • ein POLYGON mit einer reduzierten Anzahl an inneren Ringen (möglicherweise mit weniger Scheitelpunkten),

  • ein POLYGON EMPTY, oder

  • ein MULTIPOLYGON mit einer reduzierten Anzahl an Polygonen (möglicherweise weniger innere Ringe oder Scheitelpunkte), oder

  • ein MULTIPOLYGON EMPTY.

Bei Linienzügen wird die Auswertung für jeden Linienzug getrennt vorgenommen, was zu einem der folgenden Ergebnisse führen kann:

  • die ursprüngliche Geometrie,

  • ein LINESTRING mit einer reduzierten Anzahl an Scheitelpunkten,

  • ein LINESTRING LEER,

  • ein MULTILINESTRING mit einer reduzierten Anzahl an Linienzügen (möglicherweise weniger Scheitelpunkten), oder

  • ein MULTILINESTRING LEER.

Beispiel: ST_RemoveSmallParts() angewendet auf ein Multi-Polygon. Blaue Teile bleiben erhalten.

Verfügbarkeit: 3.5.0

Beispiele

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