STBuffer (tipo di dati geometry)
Si applica a: SQL Server
database SQL di Azure
Istanza gestita di SQL di Azure
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 )
Nota
Per visualizzare la sintassi Transact-SQL per SQL Server 2014 (12.x) e versioni precedenti, vedere Documentazione delle versioni precedenti.
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