BufferWithTolerance(geometry 数据类型)

返回一个表示所有点值的并集的几何对象,这些点与 geometry 实例之间的距离小于或等于指定值,允许存在指定的公差。

语法

.BufferWithTolerance ( distance, tolerance, relative )

参数

  • distance
    一个指定到 geometry 实例的距离的 float 表达式,缓冲区就是环绕该实例而计算出的。

  • tolerance
    指定缓冲区距离的公差的 float 表达式。

    “公差”指的是理想的缓冲区距离与返回的线性近似值之间的最大偏差。

    例如,点的理想缓冲区距离为圆圈,但是这必须与多边形近似。 公差越小,多边形具有的点就越多,这将增加结果的复杂度,但可减少错误。

  • relative
    一个 bit,指定 tolerance 值是相对值还是绝对值。 如果为“TRUE”或 1,则公差为相对值并按 tolerance 参数与该实例的边界框的直径之间的乘积进行计算。 如果为“FALSE”或 0,则公差是绝对值,并且 tolerance 值是理想缓冲区距离与返回的线性近似值之间的绝对最大偏差。

返回类型

SQL Server 返回类型:geometry

CLR 返回类型:SqlGeometry

异常

tolerance 参数必须大于零。 如果 tolerance <= 0,则会引发 System.ArgumentOutOfRangeException。

注意注意

由于 tolerance 具有 float 类型,如果指定的 tolerance 值很小,则可能会由于浮点类型舍入问题而引发 System.Runtime.InteropServices.COMException。

注释

如果 distance > 0,则会返回 Polygon 或 MultiPolygon 实例。

注意注意

由于距离具有 float 类型,极小的值可能会在计算中等于零。 如果发生这种情况,则会返回调用 geometry 实例的副本。 请参阅 float 和 real (Transact-SQL)

如果 distance = 0,则会返回调用 geometry 实例的副本。

如果 distance < 0,

  • 当实例维度为 0 或 1 时,将返回空 GeometryCollection 实例。

  • 当实例维度为 2 或更大时,将返回负缓冲区。

    注意注意

    负缓冲区还可能会创建一个空 GeometryCollection 实例。

负缓冲区将删除距 geometry 实例边界给定距离的所有点。

理论缓冲区和计算出的缓冲区之间的误差为 max(tolerance, extents * 1.E-7),其中,tolerance 是 tolerance 参数的值。 有关 extents 的详细信息,请参阅geometry 数据类型方法引用

示例

以下示例创建一个 Point 实例,并使用 BufferWithTolerance() 获取环绕该实例的大致缓冲区。

DECLARE @g geometry;
SET @g = geometry::STGeomFromText('POINT(3 3)', 0);
SELECT @g.BufferWithTolerance(1, .5, 0).ToString();

请参阅

参考

STBuffer(geometry 数据类型)

其他资源

几何图形实例上的扩展方法