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