Share via


Reduce (geometry-Datentyp)

Gilt für:SQL ServerAzure SQL-DatenbankAzure SQL Managed Instance

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

Syntax

  
.Reduce ( tolerance )  

Hinweis

Informationen zum Anzeigen der Transact-SQL-Syntax für SQL Server 2014 (12.x) und früher finden Sie unter Dokumentation zu früheren Versionen.

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.

In den Instanzen LineString, CircularString und CompoundCurve werden die ursprünglichen Start- und Endpunkte der Instanz vom Näherungsalgorithmus beibehalten. Der Algorithmus rechnet anschließend iterativ den Punkt aus der ursprünglichen Instanz hinzu, der am meisten vom Ergebnis abweicht. Dieser Vorgang wird so lange fortgesetzt, bis kein Punkt mehr über die angegebene Toleranz hinaus abweicht.

Reduce() gibt eine LineString-, CircularString- oder CompoundCurve-Instanz 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-Ausnahme, 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 eine Sehne diese Kriterien erfüllt, wird der Kreisbogen in den Berechnungen durch die Sehne ersetzt. Wenn eine Sehne diese Kriterien nicht erfüllt, 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();

Dieses Beispiel erzeugt die folgende Ausgabe:

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 drei 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 mit drei Toleranzebenen verwendet: LineString(0 0, 16 0).

Anzeigen eines Beispiels mit verloren gegangenem Ausgangs- und Endpunkt

Im folgenden Beispiel wird veranschaulicht, dass der ursprüngliche Ausgangs- und Endpunkt von der resultierenden Instanz möglicherweise nicht beibehalten werden. Dieses Verhalten liegt darin begründet, 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;  

Weitere Informationen

Erweiterte statische geometry-Methoden