STBuffer(geometry 数据类型)

适用于:SQL ServerAzure SQL 数据库Azure SQL 托管实例Microsoft Fabric 中的 SQL 分析终结点Microsoft Fabric 中的仓库

返回一个几何图形对象,该对象表示所有与 geometry 实例的距离小于或等于指定值的点的并集。

语法

  
.STBuffer ( distance )  

注意

若要查看 SQL Server 2014 (12.x) 及更早版本的 Transact-SQL 语法,请参阅早期版本文档

参数

distance
类型为 float(在 .NET Framework 中为 double)的值,用于指定与围绕其计算缓冲区的几何图形实例的距离。

返回类型

SQL Server 返回类型:geometry

CLR 返回类型:SqlGeometry

备注

STBuffer() 计算缓冲区的方式与 BufferWithTolerance 相似,指定 tolerance = distance * .001 和 relative = false。

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

注意

由于 distance 的类型为 float,因此,很小的值可能在计算中等于零。 如果发生这种情况,则会返回执行调用的 geometry 实例的副本。 请参阅 float 和 real (Transact-SQL)

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

如果 distance < 0,则

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

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

    注意

    负缓冲区还可能会创建空的 GeometryCollection 实例

负缓冲区删除距几何图形边界给定距离的所有点。

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

示例

A. 使用 < 0 的参数值在一维 geometry 实例上调用 STBuffer()

以下示例返回一个空 GeometryCollection 实例:

 DECLARE @g geometry= 'LINESTRING(3 4, 8 11)'; 
 SELECT @g.STBuffer(-1).ToString();

B. 使用 < 0 的参数值在 Polygon 实例上调用 STBuffer()

以下示例返回一个具有负缓冲区的 Polygon 实例:

 DECLARE @g geometry = 'POLYGON((1 1, 1 5, 5 5, 5 1, 1 1))'; 
 SELECT @g.STBuffer(-1).ToString();

C. 使用 < 0 的参数值在 CurvePolygon 实例上调用 STBuffer()

以下示例从 Polygon 实例中返回一个具有负缓冲区的 CurvePolygon 实例:

 DECLARE @g geometry = 'CURVEPOLYGON(COMPOUNDCURVE(CIRCULARSTRING(0 4, 4 0, 8 4), (8 4, 0 4)))'; 
 SELECT @g.STBuffer(-1).ToString();

注意

将返回 Polygon 实例,而非 CurvePolygon 实例。 若要返回 CurvePolygon 实例,请参阅 BufferWithCurves(geometry 数据类型)

D. 使用返回一个空实例的负参数值调用 STBuffer()

以下示例说明了针对前一实例,distance 参数等于 -2 时发生的情况

 DECLARE @g geometry = 'CURVEPOLYGON(COMPOUNDCURVE(CIRCULARSTRING(0 4, 4 0, 8 4), (8 4, 0 4)))'; 
 SELECT @g.STBuffer(-2).ToString();

此 SELECT 语句返回 GEOMETRYCOLLECTION EMPTY.

E. 当参数值 = 0 时调用 STBuffer()

以下示例返回调用 geometry 实例的副本:

 DECLARE @g geometry = 'LINESTRING(3 4, 8 11)'; 
 SELECT @g.STBuffer(0).ToString();

F. 使用极小的非零参数值调用 STBuffer()

以下示例还返回调用 geometry 实例的副本:

 DECLARE @g geometry = 'LINESTRING(3 4, 8 11)';  
 DECLARE @distance float = 1e-20;  
 SELECT @g.STBuffer(@distance).ToString();

G. 使用 > 0 的参数值调用 STBuffer()

以下示例返回 Polygon 实例:

 DECLARE @g geometry= 'LINESTRING(3 4, 8 11)'; 
 SELECT @g.STBuffer(2).ToString();

H. 使用字符串参数值调用 STBuffer()

以下示例返回与前面相同的 Polygon 实例,但为方法传递一个字符串参数:

 DECLARE @g geometry= 'LINESTRING(3 4, 8 11)'; 
 SELECT @g.STBuffer('2').ToString();

以下示例将引发错误:

 DECLARE @g geometry = 'LINESTRING(3 4, 8 11)'; 
 SELECT @g.STBuffer('a').ToString();

注意

前面的两个示例为 STBuffer() 方法传递字符串文字。 第一个示例有效,因为可以将字符串文字转换为数值。 但第二个示例引发 ArgumentException

I. 对 MultiPoint 实例调用 STBuffer()

以下示例返回两个 MultiPolygon 实例和一个 Polygon 实例。

 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();

前两个 SELECT 语句返回一个 MultiPolygon 实例,因为 distance 参数小于或等于两个点 (1 1) 和 (1 4) 之间的距离的 1/2。 第三个 SELECT 语句返回一个 Polygon 实例,因为两个点 (1 1) 和 (1 4) 的缓冲实例发生重叠

另请参阅

BufferWithTolerance(geometry 数据类型)
几何图形实例上的 OGC 方法