BufferWithCurves (tipo de dados geometria)
Aplica-se a: SQL Server Banco de Dados SQL do Azure Instância Gerenciada de SQL do Azure Banco de Dados SQL no Microsoft Fabric
Retorna uma instância de geometry que representa o conjunto de todos os pontos cuja distância da instância de geometry de chamada é menor ou igual ao parâmetro distance.
Sintaxe
.BufferWithCurves ( distance )
Argumentos
distance
É um float que indica a distância máxima em que os pontos que formam o buffer podem estar da instância de geometry.
Tipos de retorno
Tipo de retorno do SQL Server: geometry
Tipo de retorno do CLR: SqlGeometry
Exceções
Os critérios a seguir gerarão uma ArgumentException.
Nenhum parâmetro é passado ao método, como
@g.BufferWithCurves()
Um parâmetro não numérico é passado para o método, como
@g.BufferWithCurves('a')
NULL é passado ao método, como
@g.BufferWithCurves(NULL)
Comentários
A ilustração a seguir mostra um exemplo de uma instância de geometria retornado por este método.
A tabela a seguir mostra os resultados retornados para obter valores de distância diferentes.
Valor de distância | Dimensões do tipo | Tipo espacial retornado |
---|---|---|
distância < 0 | Zero ou um | Instância de GeometryCollection vazia |
distância < 0 | Dois ou mais | Uma instância de CurvePolygon ou GeometryCollection com um buffer negativo. Observação: Um buffer negativo pode criar uma GeometryCollection vazia |
distância = 0 | Todas as dimensões | Cópia da instância de geometry de invocação |
distância > 0 | Todas as dimensões | Instância de CurvePolygon ou GeometryCollection |
Observação
Como distance é um float, um valor muito pequeno pode ser igualado a zero nos cálculos. Quando isto ocorre, uma cópia da instância de geometry de chamada é retornada. Confira flutuante e real (Transact-SQL).
Um buffer negativo remove todos os pontos incluídos na distância especificada do limite da geometria. A ilustração a seguir mostra um buffer negativo como a área sombreada mais clara do círculo. A linha pontilhada é o limite do polígono original e a linha sólida é o limite do polígono resultante.
Se um parâmetro string for passado ao método, ele será convertido em um float ou gerará uma ArgumentException
.
Exemplos
a. Como chamar BufferWithCurves() com um valor de parâmetro < 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.BufferWithCurves(-1).ToString();
B. Como chamar BufferWithCurves() com um valor de parâmetro < 0 em uma instância de geometria bidimensional
O exemplo a seguir retorna uma instância CurvePolygon
com um buffer negativo:
DECLARE @g geometry = 'CURVEPOLYGON(COMPOUNDCURVE(CIRCULARSTRING(0 4, 4 0, 8 4), (8 4, 0 4)))';
SELECT @g.BufferWithCurves(-1).ToString()
C. Como chamar BufferWithCurves() com um valor de parâmetro < 0 que retorna uma GeometryCollection vazia
O seguinte exemplo mostra o que ocorre quando o parâmetro distance é igual a -2:
DECLARE @g geometry = 'CURVEPOLYGON(COMPOUNDCURVE(CIRCULARSTRING(0 4, 4 0, 8 4), (8 4, 0 4)))';
SELECT @g.BufferWithCurves(-2).ToString();
Esta instrução SELECT retorna GEOMETRYCOLLECTION EMPTY
D. Chamando BufferWithCurves() com um valor de parâmetro = 0
O seguinte exemplo retorna uma cópia da instância de geometry de chamada:
DECLARE @g geometry = 'LINESTRING(3 4, 8 11)';
SELECT @g.BufferWithCurves(0).ToString();
E. Chamando BufferWithCurves() com um valor de parâmetro diferente de zero que é extremamente pequeno
O seguinte exemplo também retorna uma cópia da instância de geometry de chamada:
DECLARE @g geometry = 'LINESTRING(3 4, 8 11)';
DECLARE @distance float = 1e-20;
SELECT @g.BufferWithCurves(@distance).ToString();
F. Como chamar BufferWithCurves() com um valor de parâmetro > 0
O exemplo a seguir retorna uma instância CurvePolygon
:
DECLARE @g geometry= 'LINESTRING(3 4, 8 11)';
SELECT @g.BufferWithCurves(2).ToString();
G. Transmitindo um parâmetro de cadeia de caracteres válido
O exemplo a seguir retorna a mesma instância CurvePolygon
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.BufferWithCurves('2').ToString();
H. Transmitindo um parâmetro de cadeia de caracteres inválido
O exemplo a seguir lançará um erro:
DECLARE @g geometry = 'LINESTRING(3 4, 8 11)'
SELECT @g.BufferWithCurves('a').ToString();
Observe que os dois exemplos anteriores transmitiram uma cadeia de caracteres literal ao método BufferWithCurves()
. 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 BufferWithCurves() em instância de MultiPoint
O exemplo a seguir retorna duas instâncias GeometryCollection
e uma instância CurvePolygon
:
DECLARE @g geometry = 'MULTIPOINT((1 1),(1 4))';
SELECT @g.BufferWithCurves(1).ToString();
SELECT @g.BufferWithCurves(1.5).ToString();
SELECT @g.BufferWithCurves(1.6).ToString();
As duas primeiras instruções SELECT retornam uma instância de GeometryCollection
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 CurvePolygon
porque as instâncias armazenadas em buffer dos dois pontos, (1 1) e (1 4), se sobrepõem.