STBuffer (tipo de datos geometry)
Se aplica a: SQL Server Azure SQL Database Azure SQL Managed Instance
Devuelve un objeto geométrico que representa la unión de todos los puntos cuya distancia desde una instancia de geometry es menor o igual que un valor especificado.
Sintaxis
.STBuffer ( distance )
Argumentos
distance
Es un valor de tipo float (double en .NET Framework) que especifica la distancia desde la instancia de geometry en torno a la cual se puede calcular el búfer.
Tipos de valor devuelto
Tipo de valor devuelto de SQL Server: geometry
Tipo de valor devuelto de CLR: SqlGeometry
Comentarios
STBuffer()
calcula un búfer como BufferWithTolerance mediante la especificación de tolerance = distance * .001 y relative = false.
Cuando distance> 0, se devuelve una instancia de Polygon o MultiPolygon.
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)
Cuando distance = 0, se devuelve una copia de la instancia de geometry que llama.
Cuando distance< 0:
Se devuelve una instancia de GeometryCollection vacía si las dimensiones de la instancia son 0 o 1.
se devuelve un búfer negativo si las dimensiones de la instancia son 2 o más.
Nota:
Un búfer negativo también puede crear una instancia de GeometryCollection vacía.
Un búfer negativo quita todos los puntos incluidos en la distancia dada del límite de la geometría.
El error entre el búfer teórico y el calculado es max(tolerance, extents * 1.E-7), donde tolerance = distance * ,001. Para más información sobre las extensiones, vea la referencia del método del tipo de datos geometry.
Ejemplos
A. Llamar a STBuffer() con parameter_value < 0 en una instancia de geometría dimensional
En el siguiente ejemplo se devuelve una instancia de GeometryCollection
vacía:
DECLARE @g geometry= 'LINESTRING(3 4, 8 11)';
SELECT @g.STBuffer(-1).ToString();
B. Llamar a STBuffer() con parameter_value < 0 en una instancia de Polygon
En el siguiente ejemplo se devuelve una instancia de Polygon
con un búfer negativo:
DECLARE @g geometry = 'POLYGON((1 1, 1 5, 5 5, 5 1, 1 1))';
SELECT @g.STBuffer(-1).ToString();
C. Llamar a STBuffer() con parameter_value < 0 en una instancia de CurvePolygon
En el siguiente ejemplo se devuelve una instancia de Polygon
con un búfer negativo desde una instancia de CurvePolygon
:
DECLARE @g geometry = 'CURVEPOLYGON(COMPOUNDCURVE(CIRCULARSTRING(0 4, 4 0, 8 4), (8 4, 0 4)))';
SELECT @g.STBuffer(-1).ToString();
Nota:
Se devuelve una instancia de Polygon
en lugar de una instancia de CurvePolygon
. Para devolver una instancia de CurvePolygon
, vea BufferWithCurves (tipo de datos Geometry).
D. Llamar a STBuffer() con un valor de parámetro negativo que devuelve una instancia vacía
En el ejemplo siguiente se muestra lo que sucede cuando el parámetro distance es igual a -2 para el ejemplo anterior.
DECLARE @g geometry = 'CURVEPOLYGON(COMPOUNDCURVE(CIRCULARSTRING(0 4, 4 0, 8 4), (8 4, 0 4)))';
SELECT @g.STBuffer(-2).ToString();
Esta instrucción SELECT devuelve GEOMETRYCOLLECTION EMPTY.
.
E. Llamar a STBuffer() con parameter_value = 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.STBuffer(0).ToString();
F. Llamar a STBuffer() con un valor de parámetro distinto de cero que es muy 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.STBuffer(@distance).ToString();
G. Llamar a STBuffer() con parameter_value > 0
En el ejemplo siguiente se devuelve una instancia de Polygon
:
DECLARE @g geometry= 'LINESTRING(3 4, 8 11)';
SELECT @g.STBuffer(2).ToString();
H. Llamar a STBuffer() con un valor de parámetro de cadena
En el ejemplo siguiente se devuelve la misma instancia de Polygon
mencionada anteriormente, pero se pasa un parámetro de cadena al método:
DECLARE @g geometry= 'LINESTRING(3 4, 8 11)';
SELECT @g.STBuffer('2').ToString();
En el siguiente ejemplo se producirá un error:
DECLARE @g geometry = 'LINESTRING(3 4, 8 11)';
SELECT @g.STBuffer('a').ToString();
Nota:
En los dos ejemplos anteriores se pasó un literal de cadena a STBuffer()
. 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. Llamar a STBuffer() en una instancia de MultiPoint
En el siguiente ejemplo se devuelven dos instancias de MultiPolygon
y una de 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();
Las primeras dos instrucciones SELECT devuelven una instancia de MultiPolygon
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 Polygon
porque las instancias almacenadas en búfer de los dos puntos (1 1) y (1 4) se superponen.
Consulte también
BufferWithTolerance (tipo de datos geometry)
Métodos de OGC en instancias de geometry