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çã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çã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çã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çã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)