Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
van toepassing op:SQL Server
Azure SQL Database
Azure SQL Managed Instance
SQL-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;