適用於:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Microsoft Fabric 中的 SQL 資料庫
傳回 geometry 執行個體,此執行個體代表與呼叫端 geometry 執行個體相距的距離小於或等於 distance 參數之所有點的集合。
Syntax
.BufferWithCurves ( distance )
Arguments
distance
這是一個 float,指出形成緩衝的點與 geometry 執行個體相距的最大可能距離。
傳回型別
SQL Server 傳回類型:geometry
CLR 傳回類型:SqlGeometry
Exceptions
下列準則會擲回 ArgumentException。
沒有參數傳遞至此方法,例如
@g.BufferWithCurves()非數值參數傳遞至此方法,例如
@g.BufferWithCurves('a')將 NULL 傳遞至此方法,例如
@g.BufferWithCurves(NULL)
Remarks
下圖顯示由這個方法傳回的 geometry 執行個體範例。
下表顯示針對不同距離值所傳回的結果。
| 距離值 | 類型尺寸 | 傳回的空間類型 |
|---|---|---|
| 距離 < 0 | 零或一維 | 空的 GeometryCollection 執行個體 |
| 距離 < 0 | 二維或以上 | 具有負數緩衝的 CurvePolygon 或 GeometryCollection 執行個體。 注意: 負數緩衝可能會建立空白 GeometryCollection |
| 距離 = 0 | 所有維度 | 叫用端 geometry 執行個體的複本 |
| 距離 > 0 | 所有維度 | CurvePolygon 或 GeometryCollection 執行個體 |
Note
因為 distance 是 float,所以非常小的值在計算中可等同於零。 發生這種情況時,會傳回呼叫端 geometry 執行個體的複本。 請參閱 float 和 real (Transact-SQL)。
負數緩衝會移除幾何界限之給定距離內的所有點。 下圖中,負數緩衝顯示為圓形淺色陰影區域。 點線是原始多邊形的界限,實線是結果多邊形的界限。
如果將 string 參數傳遞給此方法,它就會轉換成 float 或擲回 ArgumentException。
Examples
A. 在一維幾何執行個體上呼叫 BufferWithCurves() 時,使用參數值 < 0
下列範例會傳回空白 GeometryCollection 執行個體:
DECLARE @g geometry= 'LINESTRING(3 4, 8 11)';
SELECT @g.BufferWithCurves(-1).ToString();
B. 在二維幾何執行個體上呼叫 BufferWithCurves() 時,使用參數值 < 0
下列範例會傳回具有負數緩衝的 CurvePolygon 執行個體:
DECLARE @g geometry = 'CURVEPOLYGON(COMPOUNDCURVE(CIRCULARSTRING(0 4, 4 0, 8 4), (8 4, 0 4)))';
SELECT @g.BufferWithCurves(-1).ToString()
C. 呼叫 BufferWithCurves() 時,使用參數值 < 0,會傳回空的 GeometryCollection
下列範例示範當 distance 參數等於 -2 時會發生何種狀況:
DECLARE @g geometry = 'CURVEPOLYGON(COMPOUNDCURVE(CIRCULARSTRING(0 4, 4 0, 8 4), (8 4, 0 4)))';
SELECT @g.BufferWithCurves(-2).ToString();
這個 SELECT 陳述式會傳回 GEOMETRYCOLLECTION EMPTY
D. 以參數值 = 0 呼叫 BufferWithCurves()
下列範例會傳回呼叫端 geometry 執行個體的複本:
DECLARE @g geometry = 'LINESTRING(3 4, 8 11)';
SELECT @g.BufferWithCurves(0).ToString();
E. 以極小的非零參數值呼叫 BufferWithCurves()
下列範例也會傳回呼叫端 geometry 執行個體的複本:
DECLARE @g geometry = 'LINESTRING(3 4, 8 11)';
DECLARE @distance float = 1e-20;
SELECT @g.BufferWithCurves(@distance).ToString();
F. 呼叫 BufferWithCurves() 時,使用參數值 > 0
下列範例會傳回 CurvePolygon 執行個體:
DECLARE @g geometry= 'LINESTRING(3 4, 8 11)';
SELECT @g.BufferWithCurves(2).ToString();
G. 傳遞有效的字串參數
下列範例會傳回與上述範例相同的 CurvePolygon 執行個體,但傳遞字串參數至方法:
DECLARE @g geometry= 'LINESTRING(3 4, 8 11)';
SELECT @g.BufferWithCurves('2').ToString();
H. 傳遞無效的字串參數
下列範例會擲回錯誤:
DECLARE @g geometry = 'LINESTRING(3 4, 8 11)'
SELECT @g.BufferWithCurves('a').ToString();
請注意,上述兩個範例傳遞字串常值至 BufferWithCurves() 方法。 第一個範例可行,因為字串常值可轉換為數值。 但是,第二個範例會擲回 ArgumentException。
I. 在 MultiPoint 執行個體上呼叫 BufferWithCurves()
下列範例會傳回兩個 GeometryCollection 執行個體和一個 CurvePolygon 執行個體:
DECLARE @g geometry = 'MULTIPOINT((1 1),(1 4))';
SELECT @g.BufferWithCurves(1).ToString();
SELECT @g.BufferWithCurves(1.5).ToString();
SELECT @g.BufferWithCurves(1.6).ToString();
前兩個 SELECT 陳述式會傳回 GeometryCollection 執行個體,因為參數 distance 小於或等於 (1 1) 和 (1 4) 兩點之間距離的 1/2。 第三個 SELECT 陳述式會傳回 CurvePolygon 執行個體,因為 (1 1) 和 (1 4) 兩點的緩衝執行個體重疊。