Reduce (tipo di dati geometry)
Viene restituita un'approssimazione dell'istanza geometry specificata prodotta eseguendo l'algoritmo Douglas-Peucker nell'istanza con la tolleranza specificata.
Sintassi
.Reduce ( tolerance )
Argomenti
- tolerance
Valore di tipo float. tolerance è la tolleranza per l'input dell'algoritmo Douglas-Peucker.
Tipi restituiti
SQL Server tipo restituito: geometry
Tipo CLR restituito: SqlGeometry
Osservazioni
Per i tipi relativi a una raccolta, questo algoritmo opera indipendentemente su ciascun tipo geometry contenuto nell'istanza.
Questo algoritmo non modifica le istanze Point.
Sulle istanze LineString, l'algoritmo Douglas-Peucker consente di mantenere i punti di inizio e di fine originali dell'istanza e, in modo iterativo, di aggiungere nuovamente il punto dall'istanza originale con la maggiore deviazione rispetto al risultato fino a quando nessun punto devia più della tolleranza specificata.
Attenzione |
|---|
L'algoritmo Douglas-Peucker può comportare un'istanza LineString non valida, ma il metodo Reduce chiamerà internamente il metodo MakeValid sull'istanza risultante. Ciò potrebbe comportare la rimozione dei punti di inizio e di fine originali dell'istanza risultante. Per un esempio, vedere Showing an example where the original start and end points are lost. |
Sulle istanze Polygon, l'algoritmo Douglas-Peucker viene applicato indipendentemente a ogni anello. Il metodo genererà un'eccezione FormatException se l'istanza Polygon restituita non è valida. Se ad esempio Reduce() viene applicato per semplificare ogni anello nell'istanza e gli anelli risultanti si sovrappongono, viene creata un'istanza MultiPolygon non valida.
Esempi
Semplificazione di un'istanza LineString con Reduce()
Nell'esempio seguente viene creata un'istanza LineString e viene utilizzato il metodo Reduce() per semplificarla.
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();
Visualizzazione di un esempio in cui i punti di inizio e di fine vengono persi
Nell'esempio seguente viene illustrato come l'istanza risultante non possa mantenere i punti di inizio e di fine originali. Ciò si verifica in quanto il mantenimento dei punti di inizio e di fine originali comporterebbe un'istanza LineString non valida.
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;
Attenzione