Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dotyczy:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Baza 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;