STBuffer (geometry Data Type)
Applies to: SQL Server Azure SQL Database Azure SQL Managed Instance
Returns a geometric object that represents the union of all points whose distance from a geometry instance is less than or equal to a specified value.
Syntax
.STBuffer ( distance )
Arguments
distance
Is a value of type float (double in the .NET Framework) specifying the distance from the geometry instance around which to calculate the buffer.
Return Types
SQL Server return type: geometry
CLR return type: SqlGeometry
Remarks
STBuffer()
calculates a buffer like BufferWithTolerance, specifying tolerance = distance * .001 and relative = false.
When distance > 0 then either a Polygon or MultiPolygon instance is returned.
Note
Since distance is a float, a very small value can equate to zero in the calculations. When this occurs, a copy of the calling geometry instance is returned. See float and real (Transact-SQL)
When distance = 0, then a copy of the calling geometry instance is returned.
When distance < 0, then
an empty GeometryCollection instance is returned when the dimensions of the instance are 0 or 1.
a negative buffer is returned when the dimensions of the instance are 2 or more.
Note
A negative buffer may also create an empty GeometryCollection instance.
A negative buffer removes all points enclosed in given distance of the boundary of the geometry.
The error between the theoretical and computed buffer is max(tolerance, extents * 1.E-7) where tolerance = distance * .001. For more information on extents, see geometry Data Type Method Reference.
Examples
A. Calling STBuffer() with parameter_value < 0 on one dimensional geometry instance
The following example returns an empty GeometryCollection
instance:
DECLARE @g geometry= 'LINESTRING(3 4, 8 11)';
SELECT @g.STBuffer(-1).ToString();
B. Calling STBuffer() with parameter_value < 0 on a Polygon instance
The following example returns a Polygon
instance with a negative buffer:
DECLARE @g geometry = 'POLYGON((1 1, 1 5, 5 5, 5 1, 1 1))';
SELECT @g.STBuffer(-1).ToString();
C. Calling STBuffer() with parameter_value < 0 on a CurvePolygon instance
The following example returns a Polygon
instance with a negative buffer from a CurvePolygon
instance:
DECLARE @g geometry = 'CURVEPOLYGON(COMPOUNDCURVE(CIRCULARSTRING(0 4, 4 0, 8 4), (8 4, 0 4)))';
SELECT @g.STBuffer(-1).ToString();
Note
A Polygon
instance is returned instead of a CurvePolygon
instance. To return a CurvePolygon
instance, see BufferWithCurves (geometry Data Type)
D. Calling STBuffer() with a negative parameter value that returns an empty instance
The following example shows what occurs when the distance parameter equals -2 for the previous example.
DECLARE @g geometry = 'CURVEPOLYGON(COMPOUNDCURVE(CIRCULARSTRING(0 4, 4 0, 8 4), (8 4, 0 4)))';
SELECT @g.STBuffer(-2).ToString();
This SELECT statement returns a GEOMETRYCOLLECTION EMPTY.
E. Calling STBuffer() with parameter_value = 0
The following example returns a copy of the calling geometry
instance:
DECLARE @g geometry = 'LINESTRING(3 4, 8 11)';
SELECT @g.STBuffer(0).ToString();
F. Calling STBuffer() with a non-zero parameter value that is extremely small
The following example also returns a copy of the calling geometry
instance:
DECLARE @g geometry = 'LINESTRING(3 4, 8 11)';
DECLARE @distance float = 1e-20;
SELECT @g.STBuffer(@distance).ToString();
G. Calling STBuffer() with parameter_value > 0
The following example returns a Polygon
instance:
DECLARE @g geometry= 'LINESTRING(3 4, 8 11)';
SELECT @g.STBuffer(2).ToString();
H. Calling STBuffer() with a string parameter value
The following example returns the same Polygon
instance as mentioned earlier, but a string parameter is passed to the method:
DECLARE @g geometry= 'LINESTRING(3 4, 8 11)';
SELECT @g.STBuffer('2').ToString();
The following example will throw an error:
DECLARE @g geometry = 'LINESTRING(3 4, 8 11)';
SELECT @g.STBuffer('a').ToString();
Note
The previous two examples passed a string literal to the STBuffer()
. The first example works because the string literal can be converted to a numeric value. However, the second example throws an ArgumentException
.
I. Calling STBuffer() on a MultiPoint instance
The following example returns two MultiPolygon
instances and one Polygon
instance:
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();
The first two SELECT statements return a MultiPolygon
instance because the parameter distance is less than or equal to 1/2 the distance between the two points (1 1) and (1 4). The third SELECT statement returns a Polygon
instance because the buffered instances of the two points (1 1) and (1 4) overlap.
See Also
BufferWithTolerance (geometry Data Type)
OGC Methods on Geometry Instances