Partilhar via


Reduzir (tipo de dados de geometria)

Aplica-se a:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceBase 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;  

Ver também

Métodos de geometria estática estendida