Reduce (tipo de dados de geometria)
Retorna uma aproximação de determinada instância de geometry produzida pela execução do algoritmo Douglas-Peucker na instância com a tolerância específica.
Sintaxe
.Reduce ( tolerance )
Argumentos
- tolerance
É um valor do tipo flutuante. tolerance é a tolerância a ser inserida no algoritmo Douglas-Peucker.
Tipos de retorno
SQL Server tipo de retorno: geometry
Tipo de retorno CLR: SqlGeometry
Comentários
Para tipos de coleção, este algoritmo funciona independentemente em cada geometry contido na instância.
Esse algoritmo não modifica instâncias de Point.
Em instâncias de LineString, o algoritmo Douglas-Peucker retém os pontos de início e término da instância e, iterativamente, volta a adicionar o ponto da instância original que mais se desvia do resultado, até que nenhum ponto se desvie mais do que a tolerância especificada.
![]() |
---|
O algoritmo Douglas-Peucker pode resultar em uma instância de LineString inválida, mas o método Reduce chamará o método MakeValid internamente na instância resultante. Isso pode resultar na remoção dos pontos de início e término originais da instância resultante. Para obter um exemplo, consulte Showing an example where the original start and end points are lost. |
Em instâncias de Polygon, o algoritmo de Douglas-Peucker é aplicado independentemente a cada anel. O método produzirá uma FormatException se a instância de Polygon retornada não for válida; por exemplo, uma instância inválida de MultiPolygon será criada se Reduce() for aplicado para simplificar cada anel na instância e os anéis resultantes se sobrepuserem.
Exemplos
Simplificando uma instância LineString com Reduce()
O exemplo a seguir cria uma instância de LineString 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();
Mostrando um exemplo em que os pontos de início e término originais são perdidos
O exemplo a seguir mostra como os pontos de início e término originais podem não ser retidos pela instância resultante. Isso ocorre porque a retenção dos pontos de início e término 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;