Partilhar via


STBuffer (tipo de dados geometry)

Retorna um objeto geométrico que representa a união de todos os pontos cuja distância de uma instância geometry é menor ou igual a um valor especificado.

Sintaxe

.STBuffer ( distance )

Argumentos

  • distance
    É um valor do tipo float (double no .NET Framework) que especifica a distância de uma instância geometry ao redor da qual o buffer será calculado.

Tipos de retorno

SQL Server tipo de retorno: geometry

Tipo de retorno CLR: SqlGeometry

Comentários

STBuffer() calcula um buffer, como BufferWithTolerance, com a especificação de tolerance = distância * 0,001 e relative = false.

Quando distance > 0, uma instância de Polygon ou MultiPolygon é retornada.

ObservaçãoObservação

Como o valor de distance é um float, um valor muito pequeno pode ser igualado a zero nos cálculos. Quando isso ocorre, uma cópia da instância geometry de chamada é retornada. Consulte flutuante e real (Transact-SQL)

Quando distance = 0, uma cópia da instância de geometry de chamada é retornada.

Quando distance < 0,

  • uma instância GeometryCollection vazia é retornada quando as dimensões da instância são 0 ou 1.

  • um buffer negativo é retornado quando as dimensões da instância são 2 ou mais.

    ObservaçãoObservação

    Um buffer negativo também pode criar uma instância GeometryCollection vazia.

Um buffer negativo remove todos os incluídos na distância especificada do limite da geometria.

O erro entre o buffer teórico e o computado é max(tolerance, extents * 1.E-7) em que tolerance = distance * .001. Para obter mais informações sobre extents, consulte Referência de método de tipo de dados geometry.

Exemplos

A.Chamando STBuffer() com um parameter_value < 0 em uma instância de geometry unidimensional

O exemplo a seguir retorna uma instância GeometryCollection vazia:

DECLARE @g geometry= 'LINESTRING(3 4, 8 11)';

SELECT @g.STBuffer(-1).ToString();

B.Chamando STBuffer() com parameter_value < 0 em uma instância de Polygon

O exemplo a seguir retorna uma instância Polygon com um buffer negativo:

DECLARE @g geometry = 'POLYGON((1 1, 1 5, 5 5, 5 1, 1 1))';

SELECT @g.STBuffer(-1).ToString();

C.Chamando STBuffer() com parameter_value < 0 em uma instância de CurvePolygon

O exemplo a seguir retorna uma instância Polygon com um buffer negativo de uma instância CurvePolygon:

DECLARE @g geometry = 'CURVEPOLYGON(COMPOUNDCURVE(CIRCULARSTRING(0 4, 4 0, 8 4), (8 4, 0 4)))';

SELECT @g.STBuffer(-1).ToString();

ObservaçãoObservação

Uma instância Polygon é retornada, em vez de uma instância CurvePolygon. Para retornar uma instância CurvePolygon, consulte BufferWithCurves (tipo de dados geometria)

D.Chamando STBuffer() com um valor de parâmetro negativo que retorna uma instância vazia

O exemplo a seguir mostra o que ocorre quando o parâmetro distance é igual a -2 para o exemplo anterior.

DECLARE @g geometry = 'CURVEPOLYGON(COMPOUNDCURVE(CIRCULARSTRING(0 4, 4 0, 8 4), (8 4, 0 4)))';

SELECT @g.STBuffer(-2).ToString();

Esta instrução SELECT retorna GEOMETRYCOLLECTION EMPTY.

E.Chamando STBuffer() com parameter_value = 0

O exemplo a seguir retorna uma cópia da instância geometry de chamada:

DECLARE @g geometry = 'LINESTRING(3 4, 8 11)';

SELECT @g.STBuffer(0).ToString();

F.Chamando STBuffer() com um valor de parâmetro diferente de zero que é extremamente pequeno

O exemplo a seguir também retorna uma cópia da instância geometry de chamada:

DECLARE @g geometry = 'LINESTRING(3 4, 8 11)';

DECLARE @distance float = 1e-20;

SELECT @g.STBuffer(@distance).ToString();

G.Chamando STBuffer() com parameter_value > 0

O exemplo a seguir retorna uma instância Polygon:

DECLARE @g geometry= 'LINESTRING(3 4, 8 11)';

SELECT @g.STBuffer(2).ToString();

H.Chamando STBuffer() com um valor de parâmetro de cadeia de caracteres

O exemplo a seguir retorna a mesma instância Polygon como mencionado anteriormente, mas um parâmetro de cadeia de caracteres é passado ao método:

DECLARE @g geometry= 'LINESTRING(3 4, 8 11)';

SELECT @g.STBuffer('2').ToString();

O exemplo a seguir lançará um erro:

DECLARE @g geometry = 'LINESTRING(3 4, 8 11)';

SELECT @g.STBuffer('a').ToString();

ObservaçãoObservação

Os dois exemplos anteriores passaram um literal de cadeia de caracteres a STBuffer(). O primeiro exemplo funciona porque o literal de cadeia de caracteres pode ser convertido em um valor numérico. Porém, o segundo exemplo lança ArgumentException.

I.Chamando STBuffer() em instância de MultiPoint

O exemplo a seguir retorna duas instâncias MultiPolygon e uma instância 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();

As duas primeiras instruções SELECT retornam uma instância MultiPolygon porque o parâmetro distance é menor ou igual a 1/2 da distância entre os dois pontos, (1 1) e (1 4). A terceira instrução SELECT retorna uma instância Polygon porque as instâncias armazenadas em buffer dos dois pontos, (1 1) e (1 4), se sobrepõem.

Consulte também

Referência

BufferWithTolerance (tipo de dados geometry)

Outros recursos

Métodos do OGC em instâncias geometry