BufferWithTolerance (geometry Data Type)
Applies To: SQL Server 2014, SQL Server 2016 Preview
Topic Status: Some information in this topic is preview and subject to change in future releases. Preview information describes new features or changes to existing features in Microsoft SQL Server 2016 Community Technology Preview 2 (CTP2).
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();