BufferWithCurves (tipo de datos Geometry)
Se aplica a: SQL Server Azure SQL Database Azure SQL Managed Instance
Devuelve una instancia de geometry que representa el conjunto de todos los puntos cuya distancia desde la instancia de geometry que realiza la llamada es menor o igual que el parámetro distance.
Sintaxis
.BufferWithCurves ( distance )
Argumentos
distance
Es un valor de tipo float que indica la distancia máxima a la que los puntos que forman el búfer pueden estar de la instancia de geometry.
Tipos de valor devuelto
Tipo de valor devuelto de SQL Server: geometry
Tipo de valor devuelto de CLR: SqlGeometry
Excepciones
En los siguientes casos, se producirá una excepción ArgumentException.
No se pasa ningún parámetro al método, como
@g.BufferWithCurves()
Se pasa al método un parámetro no numérico, como
@g.BufferWithCurves('a')
NULL se pasa al método, como en
@g.BufferWithCurves(NULL)
Observaciones
En la siguiente ilustración se muestra un ejemplo de una instancia de geometría devuelta por este método.
En la siguiente tabla se muestran los resultados devueltos para distintos valores de distancia.
Valor de distancia | Dimensiones de tipo | Tipo espacial devuelto |
---|---|---|
distancia < 0 | Cero o uno | Instancia de GeometryCollection vacía |
distancia < 0 | Dos o más | Instancia de CurvePolygon o GeometryCollection con un búfer negativo. Nota: un búfer negativo puede crear una instancia de GeometryCollection vacía. |
distancia = 0 | Todas las dimensiones | Copia de la instancia de geometry que hace la llamada |
distancia > 0 | Todas las dimensiones | Instancia de CurvePolygon o GeometryCollection |
Nota
Puesto que distance es de tipo float, un valor muy pequeño puede resultar igual a cero en los cálculos. Cuando ocurre esto, se devuelve una copia de la instancia de geometry que llama. Consulte float y real (Transact-SQL).
Un búfer negativo quita todos los puntos incluidos en la distancia dada del límite de la geometría. En la siguiente ilustración se muestra un búfer negativo como el área del círculo sombreada en claro. La línea de puntos es el límite del polígono original y la línea continua es el límite del polígono resultante.
Si se pasa al método un parámetro string, se convertirá en un valor de tipo float o producirá una excepción ArgumentException
.
Ejemplos
A. Llamada a BufferWithCurves() con un valor de parámetro < 0 en una instancia de geometría de una dimensión
En el siguiente ejemplo se devuelve una instancia de GeometryCollection
vacía:
DECLARE @g geometry= 'LINESTRING(3 4, 8 11)';
SELECT @g.BufferWithCurves(-1).ToString();
B. Llamada a BufferWithCurves() con un valor de parámetro < 0 en una instancia de geometría de dos dimensiones
En el siguiente ejemplo se devuelve una instancia de CurvePolygon
con un búfer negativo:
DECLARE @g geometry = 'CURVEPOLYGON(COMPOUNDCURVE(CIRCULARSTRING(0 4, 4 0, 8 4), (8 4, 0 4)))';
SELECT @g.BufferWithCurves(-1).ToString()
C. Llamada a BufferWithCurves() con un valor de parámetro < 0 que devuelve una instancia de GeometryCollection vacía
En el siguiente ejemplo se muestra lo que sucede cuando el parámetro distance es 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 instrucción SELECT devuelve GEOMETRYCOLLECTION EMPTY
.
D. Llamada a BufferWithCurves() con un valor de parámetro = 0
En el siguiente ejemplo se devuelve una copia de la instancia de geometry que realiza la llamada:
DECLARE @g geometry = 'LINESTRING(3 4, 8 11)';
SELECT @g.BufferWithCurves(0).ToString();
E. Llamada a BufferWithCurves() con un valor de parámetro distinto de cero que es sumamente pequeño
En el siguiente ejemplo también se devuelve una copia de la instancia de geometry que realiza la llamada:
DECLARE @g geometry = 'LINESTRING(3 4, 8 11)';
DECLARE @distance float = 1e-20;
SELECT @g.BufferWithCurves(@distance).ToString();
F. Llamada a BufferWithCurves() con un valor de parámetro > 0
En el ejemplo siguiente se devuelve una instancia de CurvePolygon
:
DECLARE @g geometry= 'LINESTRING(3 4, 8 11)';
SELECT @g.BufferWithCurves(2).ToString();
G. Se pasa un parámetro de cadena válido
En el ejemplo siguiente se devuelve la misma instancia de CurvePolygon
mencionada anteriormente, pero se pasa un parámetro de cadena al método:
DECLARE @g geometry= 'LINESTRING(3 4, 8 11)';
SELECT @g.BufferWithCurves('2').ToString();
H. Se pasa un parámetro de cadena no válido
En el siguiente ejemplo se producirá un error:
DECLARE @g geometry = 'LINESTRING(3 4, 8 11)'
SELECT @g.BufferWithCurves('a').ToString();
Observe que en los dos ejemplos anteriores se pasa un literal de cadena al método BufferWithCurves()
. El primer ejemplo funciona porque el literal de cadena se puede convertir en un valor numérico. Sin embargo, el segundo ejemplo inicia una excepción ArgumentException
.
I. Llamada a BufferWithCurves() en una instancia de tipo MultiPoint
En el siguiente ejemplo se devuelven dos instancias de GeometryCollection
y una de 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();
Las primeras dos instrucciones SELECT devuelven una instancia de GeometryCollection
porque el parámetro distance es menor o igual a la mitad de la distancia entre los dos puntos (1 1) y (1 4). La tercera instrucción SELECT devuelve una instancia de CurvePolygon
porque las instancias almacenadas en búfer de los dos puntos (1 1) y (1 4) se superponen.