STBuffer (tipo di dati geometry)
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
SQL Server tipo restituito: geometry
Tipo CLR restituito: SqlGeometry
Osservazioni
STBuffer() consente di calcolare un buffer in modo analogo a BufferWithTolerance, specificando tolerance = distanza * 0,001 e relative = false.
Quando distance > 0, viene restituita un'istanza Polygon o MultiPolygon.
[!NOTA]
Poiché la distanza è 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 quando 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]
È inoltre 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 calcolato e quello teorico è max(tolerance, extents * 1.E-7) dove tolerance = distance * .001. Per ulteriori informazioni su extents, vedere Guida di riferimento ai metodi per il tipo di dati geometry.
Esempi
A.Chiamata a 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 a 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 a 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 memorizzate nel buffer dei due punti (1 1) e (1 4) si sovrappongono.
Vedere anche
Riferimento
BufferWithTolerance (tipo di dati geometry)