Delen via


Reduce (geometriegegevenstype)

van toepassing op:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceSQL-database in Microsoft Fabric

Retourneert een benadering van het gegeven geometrieexemplaren . De benadering wordt geproduceerd door een uitbreiding van het Douglas-Peucker algoritme uit te voeren op het exemplaar met de opgegeven tolerantie.

Syntax

  
.Reduce ( tolerance )  

Arguments

tolerance
Is een waarde van het type float. tolerantie is de tolerantie voor invoer voor het algoritme voor benadering.

Retourtypen

Retourtype SQL Server: geometrie

CLR-retourtype: SqlGeometry

Remarks

Voor verzamelingstypen werkt dit algoritme onafhankelijk van elke geometrie in het exemplaar.

Met dit algoritme worden puntexemplaren niet gewijzigd.

Op linestring-, circularstring- en CompoundCurve-exemplaren behoudt het benaderingsalgoritmen de oorspronkelijke begin- en eindpunten van het exemplaar. Het algoritme voegt vervolgens iteratief het punt terug van het oorspronkelijke exemplaar dat het meest afwijkt van het resultaat. Dit proces gaat door totdat er geen punt meer afwijkt dan de gegeven tolerantie.

Reduce() retourneert een exemplaar van LineString, CircularString of CompoundCurve voor CircularString-exemplaren . Reduce() retourneert een CompoundCurve - of LineString-exemplaar voor CompoundCurve-exemplaren .

Op veelhoekexemplaren wordt het benaderingsalgoritmen onafhankelijk van elke ring toegepast. De methode produceert een FormatException als het geretourneerde polygoonexemplaren niet geldig is. Er wordt bijvoorbeeld een niet-geldig multipolygon-exemplaar gemaakt als Reduce() deze wordt toegepast om elke ring in het exemplaar te vereenvoudigen en de resulterende ringen overlappen. Bij CurvePolygon-exemplaren met een buitenring en geen binnenringen retourneert Reduce() u een CurvePolygon-, LineString- of Puntexemplaren . Als de CurvePolygon binnenringen heeft, wordt een CurvePolygon - of MultiPoint-exemplaar geretourneerd.

Wanneer een cirkelvormige boogsegment wordt gevonden, controleert het benaderingsalgoritmen of de boog kan worden geschat door de chord binnen de helft van de opgegeven tolerantie. Akkoorden die aan deze criteria voldoen, hebben de cirkelvormige boog vervangen in de berekeningen door het akkoord. Als een akkoord niet aan deze criteria voldoet, wordt de cirkelvormige boog bewaard en wordt het algoritme voor benadering toegepast op de resterende segmenten.

Examples

A. Reduce() gebruiken om een LineString te vereenvoudigen

In het volgende voorbeeld wordt een LineString exemplaar gemaakt en gebruikt Reduce() om het exemplaar te vereenvoudigen.

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. Reduce() gebruiken met verschillende tolerantieniveaus op een CircularString

In het volgende voorbeeld Reduce() wordt gebruikgemaakt van drie tolerantieniveaus op een CircularString-exemplaar :

 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();

In dit voorbeeld wordt de volgende uitvoer gegenereerd:

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)

Elk van de geretourneerde exemplaren bevat de eindpunten (0 0) en (24 0).

C. Reduce() gebruiken met verschillende tolerantieniveaus op een CompoundCurve

In het volgende voorbeeld wordt Reduce() gebruikgemaakt van twee tolerantieniveaus op een CompoundCurve-exemplaar :

 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();

In dit voorbeeld ziet u dat de tweede SELECT-instructie de LineString-instantie retourneert : LineString(0 0, 16 0).

Een voorbeeld weergeven waarin de oorspronkelijke begin- en eindpunten verloren gaan

In het volgende voorbeeld ziet u hoe de oorspronkelijke begin- en eindpunten mogelijk niet worden bewaard door het resulterende exemplaar. Dit gedrag treedt op omdat het behouden van de oorspronkelijke begin- en eindpunten tot een ongeldig LineString-exemplaar zou leiden.

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;  

Zie ook

Uitgebreide statische geometriemethoden