Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
platí pro:SQL Server
Azure SQL Database
Azure SQL Managed Instance
SQL databáze v Microsoft Fabric
Vrátí aproximaci dané instance geometrie . Aproximace je vytvořena spuštěním rozšíření algoritmu Douglas-Peucker v instanci s danou tolerance.
Syntax
.Reduce ( tolerance )
Arguments
tolerance
Je hodnota typu float.
tolerance je tolerance vstupu pro algoritmus aproximace.
Návratové typy
Návratový typ SQL Serveru: geometrie
Návratový typ CLR: SqlGeometry
Remarks
U typů kolekcí tento algoritmus pracuje nezávisle na každé geometrii obsažené v instanci.
Tento algoritmus neupravuje instance bodů .
V instancích LineString, CircularString a CompoundCurve uchovává algoritmus aproximace původní počáteční a koncové body instance. Algoritmus dále iterativním způsobem přidá zpět bod z původní instance, která se nejvíce liší od výsledku. Tento proces pokračuje, dokud nedojde k tomu, že se odchýlí více než daná tolerance.
Reduce() vrátí instanci LineString, CircularString nebo CompoundCurve pro instance CircularString .
Reduce() vrátí instanci CompoundCurve nebo LineString pro instance CompoundCurve .
U instancí Mnohoúhelníku se algoritmus aproximace použije nezávisle na každém okruhu. Metoda vytvoříFormatException, pokud vrácená instance Polygonu není platná. Pokud se například použije neplatná instance Reduce(), která se použije ke zjednodušení každého okruhu v instanci a výsledných okruhů se překrývají. U instancí CurvePolygon s vnějším kroužkem a bez vnitřních kroužků Reduce() vrátí Instance CurvePolygon, LineString nebo Point . Pokud má KřivkaPolygon vnitřní kroužky , vrátí se instance CurvePolygon nebo MultiPoint .
Když se najde kruhový obloukový segment, algoritmus aproximace zkontroluje, zda může být oblouk přibližný pomocí jeho akordu v rámci poloviny dané tolerance. Akordy, které splňují tato kritéria, mají kruhový oblouk nahrazen ve výpočtech chordem. Pokud chord nesplňuje tato kritéria, je kruhový oblouk zachován a algoritmus aproximace se použije u zbývajících segmentů.
Examples
A. Zjednodušení řetězce LineString pomocí funkce Reduce()
Následující příklad vytvoří LineString instanci a používá Reduce() k zjednodušení instance.
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. Použití funkce Reduce() s různými úrovněmi tolerance u kruhového řetězce
Následující příklad používá Reduce() se třemi úrovněmi tolerance u instance CircularString :
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();
Tento příklad vytvoří následující výstup:
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)
Každá vrácená instance obsahuje koncové body (0 0) a (24 0).
C. Použití funkce Reduce() s různými úrovněmi tolerance u compoundCurve
Následující příklad používá Reduce() se dvěma úrovněmi tolerance u instance CompoundCurve :
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();
V tomto příkladu si všimněte, že druhý příkaz SELECT vrátí linestring instance: LineString(0 0, 16 0).
Zobrazení příkladu ztráty původních počátečních a koncových bodů
Následující příklad ukazuje, jak původní počáteční a koncové body nemusí být zachovány výslednou instancí. K tomuto chování dochází, protože zachování původní počáteční a koncové body by vedlo k neplatné instanci LineString .
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;