共用方式為


BufferWithCurves (geometry 資料類型)

適用於:SQL ServerAzure SQL 資料庫 Azure SQL 受控執行個體

傳回 geometry 執行個體,此執行個體代表與呼叫端 geometry 執行個體相距的距離小於或等於 distance 參數之所有點的集合。

Syntax

.BufferWithCurves ( distance )  

注意

若要檢視 SQL Server 2014 (12.x) 和更早版本的 Transact-SQL 語法,請參閱舊版文件

引數

distance
這是一個 float,指出形成緩衝的點與 geometry 執行個體相距的最大可能距離。

傳回型別

SQL Server 傳回類型:geometry

CLR 傳回類型:SqlGeometry

例外狀況

下列準則會擲回 ArgumentException

  • 沒有參數傳遞至此方法,例如 @g.BufferWithCurves()

  • 非數值參數傳遞至此方法,例如 @g.BufferWithCurves('a')

  • NULL 傳遞至此方法,例如 @g.BufferWithCurves(NULL)

備註

下圖顯示由這個方法傳回的 geometry 執行個體範例。

顯示由這個方法傳回 geometry 執行個體範例的圖表。

下表顯示針對不同距離值所傳回的結果。

distance 值 維度類型 傳回的空間類型
distance < 0 零或一維 空的 GeometryCollection 執行個體
distance < 0 二維或以上 具有負數緩衝的 CurvePolygonGeometryCollection 執行個體。 注意: 負數緩衝可能會建立空白 GeometryCollection
distance = 0 所有維度 叫用端 geometry 執行個體的複本
distance > 0 所有維度 CurvePolygonGeometryCollection 執行個體

注意

因為 distancefloat,所以非常小的值在計算中可等同於零。 發生這種情況時,會傳回呼叫端 geometry 執行個體的複本。 請參閱 float 和 real (Transact-SQL)

負數緩衝會移除幾何界限之給定距離內的所有點。 下圖中,負數緩衝顯示為圓形淺色陰影區域。 點線是原始多邊形的界限,實線是結果多邊形的界限。

如果將 string 參數傳遞給此方法,它就會轉換成 float 或擲回 ArgumentException

範例

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) 兩點的緩衝執行個體重疊。

另請參閱

幾何例項上擴充的方法