BufferWithTolerance (geometry Data Type)
Returns a geometric object that represents the union of all point values whose distance from a geometry instance is less than or equal to a specified value, allowing for a specified tolerance.
Applies to: SQL Server (SQL Server 2008 through current version), Azure SQL Database.
The tolerance parameter must be greater than zero. If tolerance <= 0 then a System.ArgumentOutOfRangeException is thrown.
Since tolerance is a float type, a System.Runtime.InteropServices.COMException can be thrown if the value given for tolerance is very small because of the rounding issues with floating point types.
When distance > 0 then either a Polygon or MultiPolygon instance is returned.
Since distance is a float, an extremely 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.
A negative buffer may also create an empty GeometryCollection instance.
A negative buffer removes all points within the given distance of the boundary of the geometry instance.
The error between the theorectical and computed buffer is max(tolerance, extents * 1.E-7) where tolerance is the value of the tolerance parameter. For more information on extents, see geometry Data Type Method Reference.
The following example creates a Point instance and uses BufferWithTolerance() to obtain a rough buffer around it.
DECLARE @g geometry; SET @g = geometry::STGeomFromText('POINT(3 3)', 0); SELECT @g.BufferWithTolerance(1, .5, 0).ToString();