STBuffer (tipo de datos geometry)
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 geometría alrededor de la cual se puede calcular el búfer.
Tipos de valores devueltos
SQL Server , tipo de valor devuelto: geometry
Tipo de valor devuelto de CLR: SqlGeometry
Comentarios
STBuffer() calcula un búfer como BufferWithTolerance, especificando tolerance = distance * .001 y relative = false.
Cuando distance > 0 se devuelve una instancia de Polygon o MultiPolygon.
[!NOTA]
Puesto que la distancia es un 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. Vea 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 ó 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 obtener más información sobre extents, vea Referencia de los métodos 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
El siguiente ejemplo 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();
La 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.
Vea también
Referencia
BufferWithTolerance (tipo de datos geometry)