Condividi tramite


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)

Altre risorse

Metodi OGC sulle istanze di geometria