Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A következőkre vonatkozik:SQL Server
Azure SQL Database
Felügyelt Azure SQL-példány
SQL-adatbázis a Microsoft Fabricben
A megadott geometriai példány közelítését adja vissza. A közelítés a példány Douglas-Peucker algoritmusának a megadott tűréshatárral történő futtatásával jön létre.
Syntax
.Reduce ( tolerance )
Arguments
tolerance
A lebegőpontos típus értéke. a tolerancia a közelítő algoritmus bemenetének tűréshatára.
Visszatérési típusok
SQL Server visszatérési típusa: geometria
CLR visszatérési típus: SqlGeometry
Remarks
Gyűjteménytípusok esetén ez az algoritmus egymástól függetlenül működik a példányban található összes geometrián .
Ez az algoritmus nem módosítja a pontpéldányokat .
A LineString, a CircularString és a CompoundCurve példányokon a közelítő algoritmus megőrzi a példány eredeti kezdő- és végpontjait. A következő algoritmus iteratív módon hozzáadja az eredeti példány azon pontját, amely a legtöbb eltérést okozza az eredménytől. Ez a folyamat addig folytatódik, amíg a pont nem tér el a megadott tűréshatártól.
Reduce()
Egy LineString, CircularString vagy CompoundCurve-példányt ad vissza a CircularString-példányokhoz.
Reduce()
Egy CompoundCurve- vagy LineString-példánytad vissza a CompoundCurve-példányokhoz.
A sokszögpéldányokon a közelítő algoritmust a rendszer egymástól függetlenül alkalmazza az egyes gyűrűkre. A metódus akkor hoz létre egy FormatException értéket, ha a visszaadott sokszögpéldány érvénytelen; például egy érvénytelen MultiPolygon-példány jön létre, ha Reduce() a rendszer egyszerűsíti a példány egyes gyűrűinek és az eredményül kapott gyűrűk átfedését.
A CurvePolygon külső gyűrűvel és belső gyűrűkkel nem rendelkező példányokon Reduce(), LineString vagy Point-példányt ad vissza. Ha a CurvePolygon belső gyűrűkkel rendelkezik, akkor a függvény egy CurvePolygon vagy MultiPoint-példányt ad vissza.
Körkörös ívszegmens megtalálásakor a közelítő algoritmus ellenőrzi, hogy az ív a megadott tűréshatár felén belül közelítődhet-e. Az e feltételeknek megfelelő akkordok a körívet a számításokban a húrra cserélik. Ha egy húr nem felel meg ennek a feltételnek, a körkörös ív megmarad, és a közelítési algoritmust alkalmazza a rendszer a többi szegmensre.
Examples
A. A LineString egyszerűsítése a Reduce() használatával
Az alábbi példa létrehoz egy példányt LineString , és egyszerűsíti Reduce() a példányt.
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. A Reduce() használata változó tűrési szinttel a CircularStringen
Az alábbi példa egy Reduce() három tűrési szinttel rendelkezik:
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();
Ez a példa a következő kimenetet hozza létre:
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)
A visszaadott példányok mindegyike tartalmazza a végpontokat (0 0) és (24 0).
C. A Reduce() használata változó tűrési szinttel a CompoundCurve-en
Az alábbi példa két toleranciaszinttel rendelkezik Reduce() egy CompoundCurve-példányon :
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();
Ebben a példában láthatja, hogy a második SELECT utasítás a LineString-példányt adja vissza: LineString(0 0, 16 0).
Példa az eredeti kezdési és végpontok elvesztésére
Az alábbi példa bemutatja, hogyan lehet, hogy az eredeti kezdést és végpontokat nem őrzi meg az eredményként kapott példány. Ez a viselkedés azért fordul elő, mert az eredeti kezdő- és végpontok megtartása érvénytelen LineString-példányt eredményezne.
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;