Megosztás a következőn keresztül:


Csökkentés (geometriai adattípus)

A következőkre vonatkozik:SQL ServerAzure SQL DatabaseFelügyelt Azure SQL-példánySQL-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;  

Lásd még:

Kiterjesztett statikus geometriai módszerek