Condividi tramite


Reduce (tipo di dati geometry)

Restituisce un'approssimazione dell'istanza geometry specificata prodotta eseguendo un estensione dell'algoritmo Douglas-Peucker sull'istanza con la tolleranza specificata.

Sintassi

.Reduce ( tolerance )

Argomenti

  • tolerance
    Valore di tipo float. tolerance è la tolleranza per l'input dell'algoritmo di approssimazione.

Tipi restituiti

SQL Server tipo restituito: geometry

Tipo CLR restituito: SqlGeometry

Osservazioni

Per i tipi relativi a una raccolta, questo algoritmo funziona in modo indipendente su ciascun tipo 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 originali dell'istanza e, in modo iterativo, aggiunge nuovamente il punto dall'istanza originale con la maggiore deviazione rispetto al risultato finché nessun punto devia 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.

Sulle 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 Reduce() viene applicato per semplificare ogni anello nell'istanza e gli anelli risultanti si sovrappongono, viene creata un'istanza MultiPolygon non valida. Sulle istanze CurvePolygon con un anello esterno e nessun anello interno, Reduce() restituisce un'istanza CurvePolygon, LineString o Point. Se CurvePolygon dispone di 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.

Esempi

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 utilizzato con tre livelli di tolleranza su 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 utilizzato con due livelli di tolleranza su 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. Questa situazione si verifica perché mantenere i punti di inizio e 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;

Vedere anche

Altre risorse

Metodi di geometria statici estesi