Not
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Gäller för:SQL Server
Azure SQL Database
Azure SQL Managed Instance
SQL-databas i Microsoft Fabric
Returnerar en uppskattning av den angivna geometriinstansen . Uppskattningen skapas genom att köra ett tillägg av Douglas-Peucker-algoritmen på instansen med den angivna toleransen.
Syntax
.Reduce ( tolerance )
Arguments
tolerance
Är ett värde av typen float.
tolerans är toleransen för indata för uppskattningsalgoritmen.
Returtyper
SQL Server-returtyp: geometri
CLR-returtyp: SqlGeometry
Remarks
För samlingstyper fungerar den här algoritmen oberoende av varje geometri som finns i instansen.
Den här algoritmen ändrar inte punktinstanser .
På LineString-, CircularString- och CompoundCurve-instanser behåller uppskattningsalgoritmen de ursprungliga start- och slutpunkterna för instansen. Algoritmen lägger sedan iterativt tillbaka punkten från den ursprungliga instansen som mest avviker från resultatet. Den här processen fortsätter tills ingen punkt avviker mer än den angivna toleransen.
Reduce() returnerar en LineString-, CircularString- eller CompoundCurve-instans för CircularString-instanser .
Reduce() returnerar antingen en CompoundCurve - eller LineString-instans för CompoundCurve-instanser .
På Polygon-instanser tillämpas uppskattningsalgoritmen separat på varje ring. Metoden skapar en FormatException om den returnerade Polygon-instansen inte är giltig. Till exempel skapas en icke-giltig MultiPolygon-instans om Reduce() den används för att förenkla varje ring i instansen och de resulterande ringarna överlappar varandra. På CurvePolygon-instanser med en yttre ring och inga inre ringar Reduce() returnerar en CurvePolygon-, LineString- eller Point-instans . Om CurvePolygon har inre ringar returneras en CurvePolygon - eller MultiPoint-instans .
När ett cirkulärt bågsegment hittas kontrollerar uppskattningsalgoritmen om bågen kan approximeras av dess ackord inom hälften av den angivna toleransen. Ackord som uppfyller dessa kriterier har den cirkulära bågen ersatt i beräkningarna med ackordet. Om ett ackord inte uppfyller det här villkoret behålls den cirkulära bågen och uppskattningsalgoritmen tillämpas på de återstående segmenten.
Examples
A. Använda Reduce() för att förenkla en LineString
I följande exempel skapas en LineString instans och används Reduce() för att förenkla instansen.
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. Använda Reduce() med varierande toleransnivåer på en CircularString
I följande exempel används Reduce() med tre toleransnivåer på en CircularString-instans :
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();
Det här exemplet genererar följande utdata:
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)
Var och en av de returnerade instanserna innehåller slutpunkterna (0 0) och (24 0).
C. Använda Reduce() med varierande toleransnivåer på en CompoundCurve
I följande exempel används Reduce() med två toleransnivåer på en CompoundCurve-instans :
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();
I det här exemplet ser du att den andra SELECT-instruktionen returnerar LineString-instansen : LineString(0 0, 16 0).
Visar ett exempel där de ursprungliga start- och slutpunkterna går förlorade
I följande exempel visas hur de ursprungliga start- och slutpunkterna kanske inte behålls av den resulterande instansen. Det här beteendet beror på att om du behåller de ursprungliga start- och slutpunkterna skulle det resultera i en ogiltig LineString-instans .
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;