Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Aplica-se a:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Base de dados SQL no Microsoft Fabric
Retorna uma aproximação da instância de geometria fornecida. A aproximação é produzida executando uma extensão do algoritmo Douglas-Peucker na instância com a tolerância dada.
Syntax
.Reduce ( tolerance )
Arguments
tolerance
É um valor do tipo float.
tolerância é a tolerância à entrada para o algoritmo de aproximação.
Tipos de devolução
Tipo de retorno do SQL Server: geometria
Tipo de retorno CLR: SqlGeometry
Remarks
Para tipos de coleção, esse algoritmo opera independentemente em cada geometria contida na instância.
Este algoritmo não modifica instâncias de Point .
Em instâncias LineString, CircularString e CompoundCurve , o algoritmo de aproximação mantém os pontos de início e fim originais da instância. Em seguida, o algoritmo adiciona iterativamente o ponto da instância original que mais se desvia do resultado. Este processo continua até que nenhum ponto se desvie mais do que a tolerância dada.
Reduce() retorna uma ocorrência de LineString, CircularString ou CompoundCurve para instâncias de CircularString .
Reduce() retorna uma instância CompoundCurve ou LineString para instâncias CompoundCurve .
Em instâncias Polygon , o algoritmo de aproximação é aplicado independentemente a cada anel. O método produzirá um FormatException se a instância Polygon retornada não for válida, por exemplo, uma instância MultiPolygon não válida será criada se Reduce() for aplicada para simplificar cada anel na instância e os anéis resultantes se sobreporem. Em instâncias CurvePolygon com um anel externo e sem anéis internos, Reduce() retorna uma ocorrência CurvePolygon, LineString ou Point . Se o CurvePolygon tiver anéis internos, uma ocorrência de CurvePolygon ou MultiPoint será retornada.
Quando um segmento de arco circular é encontrado, o algoritmo de aproximação verifica se o arco pode ser aproximado por sua corda dentro da metade da tolerância dada. Os acordes que cumprem este critério têm o arco circular substituído nos cálculos pelo acorde. Se um acorde não atender a esse critério, o arco circular é mantido e o algoritmo de aproximação é aplicado aos segmentos restantes.
Examples
A. Usando Reduce() para simplificar um LineString
O exemplo a seguir cria uma LineString instância e usa Reduce() para simplificar a instância.
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. Usando Reduce() com níveis de tolerância variáveis em um CircularString
O exemplo a seguir usa Reduce() com três níveis de tolerância em uma ocorrência de 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();
Este exemplo produz a seguinte saída:
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)
Cada uma das instâncias retornadas contém os pontos de extremidade (0, 0) e (24, 0).
C. Usando Reduce() com níveis de tolerância variáveis em uma CompoundCurve
O exemplo a seguir usa Reduce() com dois níveis de tolerância em uma instância 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();
Neste exemplo, observe que a segunda instrução SELECT retorna a ocorrência de LineString : LineString(0 0, 16 0).
Mostrando um exemplo em que os pontos de início e fim originais são perdidos
O exemplo a seguir mostra como o início e os pontos de extremidade originais podem não ser retidos pela instância resultante. Esse comportamento ocorre porque manter os pontos de início e fim originais resultaria em uma instância LineString inválida.
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;