Compartilhar via


STBuffer (tipo de dados geometry)

Aplica-se a: SQL Server Banco de Dados SQL do Azure Instância Gerenciada de SQL do Azure

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

Sintaxe

  
.STBuffer ( distance )  

Argumentos

distance
É um valor do tipo float (duplo no .NET Framework) que especifica a distância da instância de geometria em torno da qual o buffer será calculado.

Tipos de retorno

Tipo de retorno do SQL Server: geometry

Tipo de retorno do CLR: SqlGeometry

Comentários

O STBuffer() calcula um buffer, como BufferWithTolerance, especificando tolerance = distance * .001 and relative = false.

Quando a distância for > 0, uma instância de Polygon ou MultiPolygon será retornada.

Observação

Como distance é um float, um valor muito pequeno pode ser igualado a zero nos cálculos. Quando isso ocorrer, uma cópia da instância de geometry de chamada será retornada. Confira 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 de GeometryCollection vazia será retornada quando as dimensões da instância forem 0 ou 1.

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

    Observação

    Um buffer negativo também pode criar uma instância de 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 = distância * 0,001. Para obter mais informações sobre extensões, confira Referência de método do tipo de dados geometry.

Exemplos

a. Como chamar STBuffer() com um parameter_value < 0 em uma instância de geometria 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. Como chamar 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. Como chamar 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ção

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

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 no 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 um 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. Como chamar 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çã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 de 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 de Polygon porque as instâncias armazenadas em buffer dos dois pontos, (1 1) e (1 4), se sobrepõem.

Consulte Também

BufferWithTolerance (tipo de dados geometry)
Métodos OGC em instâncias geometry