Reduce (tipo de datos geometry)
Devuelve una aproximación de la instancia de geometry especificada que se genera al aplicar el algoritmo de Douglas-Peucker a la instancia con la tolerancia indicada.
Sintaxis
.Reduce ( tolerance )
Argumentos
- tolerance
Es un valor de tipo float. tolerance es la tolerancia que se utiliza como entrada para el algoritmo de Douglas-Peucker.
Tipos de valores devueltos
SQL Server Tipo de valor devuelto de : geometry
Tipo de valor devuelto de CLR: SqlGeometry
Notas
Para los tipos de colección, este algoritmo funciona independientemente en cada tipo geometry contenido en la instancia.
Este algoritmo no modifica las instancias de Point.
En las instancias de LineString, el algoritmo de Douglas-Peucker conserva los puntos inicial y final originales de la instancia y va agregando en iteraciones el punto de la instancia original que más se desvía del resultado hasta que ningún punto se desvíe más que la tolerancia especificada.
Advertencia |
---|
El algoritmo de Douglas Peucker puede dar lugar a una instancia de LineString no válida, pero el método Reduce llamará internamente al método MakeValid en la instancia resultante. La consecuencia puede ser que se quiten los puntos inicial y final originales de la instancia resultante. Para obtener un ejemplo, vea Showing an example where the original start and end points are lost. |
En las instancias de Polygon, el algoritmo de Douglas-Peucker se aplica independientemente a cada anillo. El método generará una excepción FormatException si la instancia de Polygon devuelta no es válida; por ejemplo, se crea una instancia de MultiPolygon no válida si se aplica Reduce() para simplificar cada anillo de la instancia y los anillos resultantes se superponen.
Ejemplos
Simplificar una instancia de LineString con Reduce ()
En el ejemplo siguiente se crea una instancia de LineString y se utiliza Reduce() para simplificar la instancia.
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();
Mostrar un ejemplo en el que se pierden los puntos inicial y final originales
En el ejemplo siguiente se muestra cómo los puntos inicial y final originales no pueden ser conservados por la instancia resultante. Esto se produce porque la conservación de los puntos inicial y final originales daría lugar a una instancia de LineString no vá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;