BufferWithCurves(geography 数据类型)

返回一个 geography 实例,它表示与调用 geography 实例的距离小于或等于 distance 参数的所有点的集合。

语法

.BufferWithCurves ( distance )

参数

  • distance
    一个 float ,它表示组成缓冲区的点与 geography 实例之间的最大距离。

返回类型

SQL Server 返回类型:geography

CLR 返回类型:SqlGeography

异常

以下条件将引发 ArgumentException。

  • 没有为方法传递任何参数,例如,@g.BufferWithCurves()

  • 为方法传递了非数值参数,例如,@g.BufferWithCurves('a')

  • NULL 传递给方法,例如,@g.BufferWithCurves(NULL)

注释

下表显示为不同距离值返回的结果。

距离值

类型维度

返回的空间类型

距离 < 0

0 或 1

空 GeometryCollection 实例

距离 < 0

2 或更大

具有负缓冲区的 CurvePolygon 或 GeometryCollection 实例

注意注意

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

距离 = 0

所有维度

调用 geography 实例的副本

距离 > 0

所有维度

CurvePolygon 或 GeometryCollection 实例

注意注意

由于 distance 的数据类型为 float,很小的值可能在计算中等于零。 如果发生这种情况,则会返回调用 geography 实例的副本。

如果将 string 参数传递给方法,则会将其转换为 float;否则,将引发 ArgumentException。

示例

A.使用 < 0 的参数值对一维 geography 实例调用 BufferWithCurves()

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

DECLARE @g geography= 'LINESTRING(-122.358 47.653, -122.348 47.649, -122.348 47.658, -122.358 47.658, -122.358 47.653)';

SELECT @g.BufferWithCurves(-1).ToString();

B.使用 < 0 的参数值对二维 geography 实例调用 BufferWithCurves()

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

DECLARE @g geography = 'CURVEPOLYGON(CIRCULARSTRING(-122.358 47.653, -122.348 47.649, -122.348 47.658, -122.358 47.658, -122.358 47.653))';

SELECT @g.BufferWithCurves(-1).ToString()

C.使用 < 0 的参数值调用 BufferWithCurves(),它返回一个空 GeometryCollection

以下示例说明了 distance 参数等于 -2 时发生的情况:

DECLARE @g geography = 'CURVEPOLYGON(CIRCULARSTRING(-122.358 47.653, -122.348 47.649, -122.348 47.658, -122.358 47.658, -122.358 47.653))';

SELECT @g.BufferWithCurves(-2).ToString();

此 SELECT 语句返回 GEOMETRYCOLLECTION EMPTY

D.使用 = 0 的参数值调用 BufferWithCurves()

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

DECLARE @g geography = 'LINESTRING(-122.358 47.653, -122.348 47.649, -122.348 47.658, -122.358 47.658, -122.358 47.653)';

SELECT @g.BufferWithCurves(0).ToString();

E.使用极小的非零参数值调用 BufferWithCurves()

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

DECLARE @g geography = 'LINESTRING(-122.358 47.653, -122.348 47.649, -122.348 47.658, -122.358 47.658, -122.358 47.653)';

DECLARE @distance float = 1e-20;

SELECT @g.BufferWithCurves(@distance).ToString();

F.使用 > 0 的参数值调用 BufferWithCurves()

以下示例返回 CurvePolygon 实例:

DECLARE @g geography= 'LINESTRING(-122.358 47.653, -122.348 47.649, -122.348 47.658, -122.358 47.658, -122.358 47.653)';

SELECT @g.BufferWithCurves(2).ToString();

G.传递有效的字符串参数

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

DECLARE @g geography= 'LINESTRING(-122.358 47.653, -122.348 47.649, -122.348 47.658, -122.358 47.658, -122.358 47.653)';

SELECT @g.BufferWithCurves('2').ToString();

H.传递无效的字符串参数

以下示例将引发错误:

DECLARE @g geography = 'LINESTRING(-122.358 47.653, -122.348 47.649, -122.348 47.658, -122.358 47.658, -122.358 47.653)'

SELECT @g.BufferWithCurves('a').ToString();

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

请参阅

参考

BufferWithCurves(geometry 数据类型)

其他资源

地理实例上的扩展方法