Freigeben über


Reduce (geometry-Datentyp)

Gibt einen Näherungswert der gegebenen geometry-Instanz zurück. Dieser Näherungswert wird unter Verwendung einer Erweiterung des Douglas-Peucker-Algorithmus mit der angegebenen Toleranz ermittelt.

Syntax

.Reduce ( tolerance )

Argumente

  • tolerance
    Ein Wert vom Typ float. tolerance gibt die Toleranz an, die als Eingabe für den Näherungsalgorithmus verwendet werden soll.

Rückgabetypen

SQL Server Rückgabetyp: geometry

CLR-Rückgabetyp: SqlGeometry

Hinweise

Bei Auflistungstypen arbeitet dieser Algorithmus unabhängig für jeden geometry-Wert, der in der Instanz enthalten ist.

Dieser Algorithmus ändert keine Point-Instanzen.

Bei Instanzen von LineString, CircularString und CompoundCurve behält der Näherungsalgorithmus die ursprünglichen Anfangs- und Endpunkte der Instanz bei und fügt iterativ so lange die Punkte der ursprünglichen Instanz wieder ein, die am stärksten vom Ergebnis abweichen, bis kein weiterer Punkt stärker abweicht, als die angegebene Toleranz erlaubt.

Reduce() gibt eine Instanz von LineString, CircularString oder CompoundCurve für CircularString-Instanzen zurück. Reduce() gibt eine CompoundCurve- oder LineString-Instanz für CompoundCurve-Instanzen zurück.

Auf Polygon-Instanzen wird der Näherungsalgorithmus unabhängig für jeden Ring angewendet. Die Methode erzeugt eine FormatException, wenn die zurückgegebene Polygon-Instanz ungültig ist. Eine ungültige MultiPolygon-Instanz wird beispielsweise dann erstellt, wenn Reduce() zur Vereinfachung jedes Rings in der Instanz angewendet wird, und sich die ergebenden Ringe überschneiden. Bei Instanzen von CurvePolygon mit einem äußeren Ring und ohne innere Ringe wird von Reduce() eine Instanz von CurvePolygon, LineString oder Point zurückgegeben. Wenn CurvePolygon innere Ringe aufweist, wird eine Instanz von CurvePolygon oder eine Instanz von MultiPoint zurückgegeben.

Wenn ein Kreisbogensegment gefunden wird, überprüft der Näherungsalgorithmus, ob eine näherungsweise Bestimmung des Bogens durch die Sehne innerhalb der Hälfte der angegebenen Toleranz möglich ist. Wenn die Sehne diese Kriterien erfüllt, wird der Kreisbogen in den Berechnungen durch die Sehne ersetzt. Andernfalls wird der Kreisbogen beibehalten, und der Näherungsalgorithmus wird für die verbleibenden Segmente übernommen.

Beispiele

A.Vereinfachen eines LineString mithilfe von Reduce()

Im folgenden Beispiel wird eine LineString-Instanz erstellt und Reduce() verwendet, um die Instanz zu vereinfachen.

DECLARE @g geometry;
SET @g = geometry::STGeomFromText('LINESTRING(0 0, 0 1, 1 0, 2 1, 3 0, 4 1)', 0);
SELECT @g.Reduce(.75).ToString();

B.Verwenden von Reduce() in einem CircularString und veränderlichen Toleranzebenen

Im folgenden Beispiel wird Reduce() in einer CircularString-Instanz mit drei Toleranzebenen verwendet:

DECLARE @g geometry = 'CIRCULARSTRING(0 0, 8 8, 16 0, 20 -4, 24 0)';

SELECT @g.Reduce(5).ToString();

SELECT @g.Reduce(15).ToString();

SELECT @g.Reduce(16).ToString();

Hierdurch wird folgende Ausgabe generiert:

CIRCULARSTRING (0 0, 8 8, 16 0, 20 -4, 24 0)

COMPOUNDCURVE (CIRCULARSTRING (0 0, 8 8, 16 0), (16 0, 24 0))

LINESTRING (0 0, 24 0)

Alle zurückgegebenen Instanzen enthalten die Endpunkte (0 0) und (24 0).

C.Verwenden von Reduce() in einer CompoundCurve mit veränderlichen Toleranzebenen

Im folgenden Beispiel wird Reduce() in einer CompoundCurve-Instanz mit zwei Toleranzebenen verwendet:

DECLARE @g geometry = 'COMPOUNDCURVE(CIRCULARSTRING(0 0, 8 8, 16 0, 20 -4, 24 0),(24 0, 20 4, 16 0))';

SELECT @g.Reduce(15).ToString();

SELECT @g.Reduce(16).ToString();

Beachten Sie in diesem Beispiel, dass die zweite SELECT-Anweisung die LineString-Instanz zurückgibt: LineString(0 0, 16 0).

Anzeigen eines Beispiels mit verloren gegangenem Ausgangs- und Endpunkt

Im folgenden Beispiel wird gezeigt, dass der ursprüngliche Ausgangs- und Endpunkt von der resultierenden Instanz möglicherweise nicht beibehalten werden. Die Ursache hierfür liegt darin, dass andernfalls eine ungültige Instanz von LineString erzeugt würde.

DECLARE @g geometry = 'LINESTRING(0 0, 4 0, 2 .01, 1 0)';
DECLARE @h geometry = @g.Reduce(1);
SELECT @g.STIsValid() AS Valid
SELECT @g.ToString() AS Original, @h.ToString() AS Reduced;

Siehe auch

Andere Ressourcen

Erweiterte statische geometry-Methoden