Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Si applica a:SQL Server
Database SQL di
AzureIstanza gestita di SQL di
AzureDatabase SQL in Microsoft Fabric
Restituisce un'approssimazione dell'istanza geometry specificata. L'approssimazione viene prodotta eseguendo un'estensione dell'algoritmo Douglas-Peucker sull'istanza con la tolleranza specificata.
Syntax
.Reduce ( tolerance )
Arguments
tolerance
Valore di tipo float.
tolerance è la tolleranza da immettere per l'algoritmo di approssimazione.
Tipi restituiti
Tipo SQL Server restituito: geometry
Tipo CLR restituito: SqlGeometry
Remarks
Per i tipi di raccolta, questo algoritmo opera in modo indipendente su ogni elemento geometry contenuto nell'istanza.
Questo algoritmo non modifica le istanze Point.
Sulle istanze LineString, CircularString e CompoundCurve l'algoritmo di approssimazione mantiene i punti di inizio e fine dell'istanza originali. In seguito l'algoritmo aggiunge nuovamente in modo iterativo il punto dell'istanza originale che si discosta maggiormente dal risultato. Questo processo continua fino a quando nessun punto si discosta più della tolleranza specificata.
Reduce() restituisce un'istanza LineString, CircularString o CompoundCurve per le istanze CircularString.
Reduce() restituisce un'istanza CompoundCurve o LineString per le istanze CompoundCurve.
Nelle istanze Polygon l'algoritmo di approssimazione viene applicato in modo indipendente a ogni anello. Il metodo genera un'eccezione FormatException se l'istanza Polygon restituita non è valida. Se ad esempio viene applicato per semplificare ogni anello nell'istanza e gli anelli risultanti si sovrappongono, viene creata un'istanza Reduce() non valida. Nelle istanze CurvePolygon con un anello esterno e nessun anello interno, Reduce() restituisce un'istanza CurvePolygon, LineString o Point. Se CurvePolygon include anelli interni viene restituita un'istanza CurvePolygon o MultiPoint.
Quando viene rilevato un segmento di arco circolare, l'algoritmo di approssimazione controlla se è possibile approssimare l'arco secondo la corda in metà della tolleranza specificata. Se la corda soddisfa questi criteri, l'arco circolare viene sostituito nei calcoli dalla corda. Se non soddisfa questi criteri, l'arco circolare viene mantenuto e l'algoritmo di approssimazione viene applicato ai segmenti rimanenti.
Examples
A. Utilizzo di Riduce() per semplificare LineString
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();
B. Utilizzo di Riduce() con livelli di tolleranza diversi su CircularString
Nell'esempio seguente Reduce() viene usato con tre livelli di tolleranza in un'istanza 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();
Nell'esempio viene prodotto l'output seguente:
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)
Ogni istanza restituita contiene i punti finali (0 0) e (24 0).
C. Utilizzo di Riduce() con livelli di tolleranza diversi su CompoundCurve
Nell'esempio seguente Reduce() viene usato con due livelli di tolleranza in un'istanza 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();
In questo esempio si noti che la seconda istruzione SELECT restituisce l'istanza LineString: LineString(0 0, 16 0).
Visualizzazione di un esempio in cui i punti di inizio e fine originali vengono persi
Nell'esempio seguente viene illustrato come i punti di inizio e fine originali potrebbero non essere mantenuti dall'istanza risultante. Questo comportamento si verifica perché il mantenimento dei punti di inizio e fine originali produrrebbe 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;