Udostępnij za pomocą


Redukuj (geometryczny typ danych)

Dotyczy:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceBaza danych SQL w usłudze Microsoft Fabric

Zwraca przybliżenie danego wystąpienia geometrii . Przybliżenie jest generowane przez uruchomienie rozszerzenia algorytmu Douglas-Peucker w wystąpieniu z daną tolerancją.

Syntax

  
.Reduce ( tolerance )  

Arguments

tolerance
Jest wartością typu float. tolerancja to tolerancja danych wejściowych algorytmu przybliżenia.

Typy zwracane

Zwracany typ programu SQL Server: geometria

Typ zwracania CLR: SqlGeometry

Remarks

W przypadku typów kolekcji ten algorytm działa niezależnie na każdej geometrii zawartej w wystąpieniu.

Ten algorytm nie modyfikuje wystąpień punktów .

W wystąpieniach LineString, CircularString i CompoundCurve algorytm przybliżenia zachowuje oryginalne punkty początkowe i końcowe wystąpienia. Algorytm następnie iteracyjnie dodaje punkt z oryginalnego wystąpienia, które najbardziej odbiega od wyniku. Ten proces trwa do momentu, aż żaden punkt nie odbiega od danej tolerancji.

Reduce() Zwraca wystąpienie LineString, CircularString lub CompoundCurve dla wystąpień cyklicznych . Reduce() Zwraca wystąpienie CompoundCurve lub LineString dla wystąpień CompoundCurve .

W przypadku wystąpień wielokąta algorytm przybliżenia jest stosowany niezależnie do każdego pierścienia. Metoda spowoduje wygenerowanie FormatException wartości, jeśli zwrócone wystąpienie wielokąta jest nieprawidłowe. Na przykład tworzone jest nieprawidłowe wystąpienie MultiPolygon , jeśli Reduce() zostanie zastosowane w celu uproszczenia każdego pierścienia w wystąpieniu i nakładania się wynikowych pierścieni. W przypadku wystąpień CurvePolygon z pierścieniem zewnętrznym i bez pierścieni Reduce() wewnętrznych zwraca wystąpienie CurvePolygon, LineString lub Point . Jeśli element CurvePolygon ma pierścienie wewnętrzne, zwracane jest wystąpienie CurvePolygon lub MultiPoint .

Po znalezieniu segmentu łuku cyklicznego algorytm przybliżenia sprawdza, czy łuk może być przybliżony przez jego akord w połowie danej tolerancji. Akordy spełniające te kryteria mają łuk okrągły zastąpiony w obliczeniach przez akord. Jeśli akord nie spełnia tych kryteriów, łuk okrągły jest zachowywany, a algorytm przybliżenia jest stosowany do pozostałych segmentów.

Examples

A. Używanie funkcji Reduce() w celu uproszczenia ciągu LineString

Poniższy przykład tworzy LineString wystąpienie i używa Reduce() go do uproszczenia wystąpienia.

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. Korzystanie z funkcji Reduce() z różnym poziomem tolerancji na okrągłym wciągniku

W poniższym przykładzie użyto Reduce() trzech poziomów tolerancji w wystąpieniu 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();

Ten przykład generuje następujące wyniki:

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żde zwrócone wystąpienia zawiera punkty końcowe (0 0) i (24 0).

C. Używanie funkcji Reduce() z różnym poziomem tolerancji w obiekcie CompoundCurve

W poniższym przykładzie użyto Reduce() dwóch poziomów tolerancji w wystąpieniu 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();

W tym przykładzie zwróć uwagę, że druga instrukcja SELECT zwraca wystąpienie LineString : LineString(0 0, 16 0).

Pokazano przykład, w którym zostaną utracone oryginalne punkty początkowe i końcowe

W poniższym przykładzie pokazano, jak oryginalne uruchamianie i punkty końcowe mogą nie być zachowywane przez wynikowe wystąpienie. Takie zachowanie występuje, ponieważ zachowanie oryginalnego punktu początkowego i końcowego spowodowałoby nieprawidłowe wystąpienie 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;  

Zobacz też

Rozszerzone metody geometrii statycznej