Condividi tramite


STBuffer (tipo di dati geometry)

Si applica a: SQL Server database SQL di Azure Istanza gestita di SQL di Azure database SQL in Microsoft Fabric

Restituisce un oggetto geometrico che rappresenta l'unione di tutti i punti la cui distanza da un'istanza geometry è minore o uguale a un valore specificato.

Sintassi

  
.STBuffer ( distance )  

Argomenti

distance
Valore di tipo float (double in .NET Framework) che specifica la distanza dall'istanza di geometria intorno alla quale calcolare il buffer.

Tipi restituiti

Tipo SQL Server restituito: geometry

Tipo CLR restituito: SqlGeometry

Osservazioni:

STBuffer() calcola un buffer in modo analogo a BufferWithTolerance, specificando tolerance = distance * 0,001 e relative = false.

Se distance> 0 viene restituita un'istanza Polygon o MultiPolygon.

Nota

Poiché distance è di tipo float, nei calcoli un valore estremamente ridotto può corrispondere a zero. Quando ciò si verifica, viene restituita una copia dell'istanza geometry chiamante. Vedere float e real (Transact-SQL)

Quando distance = 0, viene restituita una copia dell'istanza geometry chiamante.

Quando distance <0,

  • viene restituita un'istanza GeometryCollection vuota se le dimensioni dell'istanza sono 0 o 1.

  • viene restituito un buffer negativo quando le dimensioni dell'istanza sono 2 o maggiori di 2.

    Nota

    È possibile che un buffer negativo crei un'istanza GeometryCollection vuota.

Un buffer negativo rimuove tutti i punti racchiusi nella distanza specificata del limite della geometria.

L'errore tra il buffer teorico e quello calcolato è max(tolerance, extents * 1.E-7), dove tolerance = distance * .001. Per altre informazioni sulle estensioni, vedere la Guida di riferimento ai metodi per il tipo di dati geometry.

Esempi

R. Chiamata di STBuffer() con parameter_value < 0 in un'istanza di geometria unidimensionale

Nell'esempio seguente viene restituita un'istanza GeometryCollection vuota:

 DECLARE @g geometry= 'LINESTRING(3 4, 8 11)'; 
 SELECT @g.STBuffer(-1).ToString();

B. Chiamata di STBuffer() con parameter_value < 0 in un'istanza Polygon

Nell'esempio seguente viene restituita un'istanza Polygon con un buffer negativo:

 DECLARE @g geometry = 'POLYGON((1 1, 1 5, 5 5, 5 1, 1 1))'; 
 SELECT @g.STBuffer(-1).ToString();

C. Chiamata di STBuffer() con parameter_value < 0 in un'istanza CurvePolygon

Nell'esempio seguente viene restituita un'istanza Polygon con un buffer negativo da un'istanza CurvePolygon:

 DECLARE @g geometry = 'CURVEPOLYGON(COMPOUNDCURVE(CIRCULARSTRING(0 4, 4 0, 8 4), (8 4, 0 4)))'; 
 SELECT @g.STBuffer(-1).ToString();

Nota

Viene restituita un'istanza Polygon anziché CurvePolygon. Per restituire un'istanza CurvePolygon, vedere BufferWithCurves (tipo di dati geometry)

D. Chiamata a STBuffer () con un valore di parametro negativo mediante il quale viene restituita un'istanza vuota

Nell'esempio seguente viene illustrato cosa accade quando nell'esempio precedente il parametro distance è uguale a -2.

 DECLARE @g geometry = 'CURVEPOLYGON(COMPOUNDCURVE(CIRCULARSTRING(0 4, 4 0, 8 4), (8 4, 0 4)))'; 
 SELECT @g.STBuffer(-2).ToString();

Questa istruzione SELECT restituisce GEOMETRYCOLLECTION EMPTY.

E. Chiamata a STBuffer() con parameter_value = 0

Nell'esempio seguente viene restituita una copia dell'istanza geometry chiamante:

 DECLARE @g geometry = 'LINESTRING(3 4, 8 11)'; 
 SELECT @g.STBuffer(0).ToString();

F. Chiamata a STBuffer() con un valore di parametro diverso da zero ed estremamente basso

Nell'esempio seguente viene inoltre restituita una copia dell'istanza geometry chiamante:

 DECLARE @g geometry = 'LINESTRING(3 4, 8 11)';  
 DECLARE @distance float = 1e-20;  
 SELECT @g.STBuffer(@distance).ToString();

G. Chiamata a STBuffer() con parameter_value > 0

Nell'esempio seguente viene restituita un'istanza Polygon:

 DECLARE @g geometry= 'LINESTRING(3 4, 8 11)'; 
 SELECT @g.STBuffer(2).ToString();

H. Chiamata a STBuffer() con un valore di parametro stringa

Nell'esempio seguente viene restituita la stessa istanza Polygon come indicato precedentemente, ma un parametro di stringa viene passato al metodo:

 DECLARE @g geometry= 'LINESTRING(3 4, 8 11)'; 
 SELECT @g.STBuffer('2').ToString();

Nell'esempio seguente verrà generato un errore:

 DECLARE @g geometry = 'LINESTRING(3 4, 8 11)'; 
 SELECT @g.STBuffer('a').ToString();

Nota

Nei due esempi precedenti è stato passato un valore letterale stringa a STBuffer(). Il primo esempio funziona perché il valore letterale stringa può essere convertito in un valore numerico. Tuttavia, nel secondo esempio viene generata un'eccezione ArgumentException.

I. Chiamata a STBuffer() in un'istanza MultiPoint

Nell'esempio seguente vengono restituite due istanze MultiPolygon e un'istanza Polygon:

 DECLARE @g geometry = 'MULTIPOINT((1 1),(1 4))'; 
 SELECT @g.STBuffer(1).ToString(); 
 SELECT @g.STBuffer(1.5).ToString(); 
 SELECT @g.STBuffer(1.6).ToString();

Le prime due istruzioni SELECT restituiscono un'istanza MultiPolygon perché il parametro DISTANCE è minore o uguale a 1/2 della distanza tra i due punti (1 1) e (1 4). La terza istruzione select restituisce un'istanza Polygon perché le istanze dei due punti (1 1) e (1 4) memorizzate nel buffer si sovrappongono.

Vedi anche

BufferWithTolerance (tipo di dati geometry)
Metodi OGC sulle istanze di geometria