返回表示所有点值的并集的几何对象,这些点到 geography 实例的距离小于或等于指定值,允许存在指定的公差。
这种 geography 数据类型方法支持大于半球的 FullGlobe 实例或空间实例。
语法
.BufferWithTolerance ( distance, tolerance, relative )
参数
distance
一个指定与 geography 实例的距离的 float 表达式,缓冲区就是环绕该实例而计算出的。缓冲区的最大距离不能超过 0.999 * π * minorAxis * minorAxis / majorAxis(~0.999 * 1/2 的地球圆周)或整个地球。
tolerance
指定缓冲区距离的公差的 float 表达式。“公差”值指的是理想的缓冲区距离与返回的线性近似段之间的最大偏差。
例如,点的理想缓冲区距离为圆圈,但是这必须与多边形近似。 公差越小,多边形具有的点就越多,这将增加结果的复杂度,但可减少错误。
最小限制为距离的 0.1%,任何小于此限制的公差都将向上舍入到此最小限制。
relative
一个 bit,指定 tolerance 值是相对值还是绝对值。 如果为“TRUE”或 1,公差为相对值并按 tolerance 参数与椭圆体的角度范围 * 赤道半径的乘积进行计算。 如果为“FALSE”或 0,则公差为绝对值并且 tolerance 值为理想缓冲区距离与返回的线性近似段之间的绝对最大偏差。
返回类型
SQL Server 返回类型:geography
CLR 返回类型: SqlGeography
注释
如果 distance 不是数字 (NAN) 或如果 distance 是正或负无穷大,则该方法将引发 ArgumentException,。 如果 tolerance 为零 (0) 而不是数字 (NAN)、负数、或正或负无穷大,则该方法也将引发 ArgumentException,。
STBuffer() 在某些情况下将返回 FullGlobe 实例;例如,当缓冲区距离大于从赤道到两极的距离时,STBuffer() 返回 FullGlobe 实例。
在缓冲区的距离超过下列限制的 FullGlobe 实例中,此方法将引发 ArgumentException:
0.999 * π * minorAxis * minorAxis / majorAxis(~0.999 * 1/2 地球的圆周)
理论和计算缓冲区之间的误差是 max(tolerance, extents * 1.E-7),其中 tolerance 是 tolerance 参数的值。 有关 extents 的详细信息,请参阅 geography 数据类型方法引用。
此方法不精确。
示例
下面的示例创建 Point 实例,并使用 BufferWithTolerance() 获取环绕该实例的大致缓冲区。
DECLARE @g geography;
SET @g = geography::STGeomFromText('POINT(-122.34900 47.65100)', 4326);
SELECT @g.BufferWithTolerance(1, .5, 0).ToString();