ST_RemoveSmallParts — Entfernt kleine Teile (Polygonringe oder Linienzüge) einer Geometrie.
geometry ST_RemoveSmallParts(
geometry geom, double precision minSizeX, double precision minSizeY)
;
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.
Verfügbarkeit: 3.5.0
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