共用方式為


STBuffer (geometry 資料類型)

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

傳回幾何物件,此物件代表與 geometry 執行個體相距的距離小於或等於指定值之所有點的聯集。

Syntax

  
.STBuffer ( distance )  

注意

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

引數

distance
這是 float 類型 (.NET Framework 中的 double) 的值,用來指定與 geometry 執行個體相距的距離 (將會從此執行個體的周圍計算緩衝)。

傳回型別

SQL Server 傳回類型:geometry

CLR 傳回類型:SqlGeometry

備註

STBuffer() 會指定 tolerance = distance * .001 且 relative = false 來計算緩衝,此計算方式與 BufferWithTolerance 類似。

distance> 0 時,會傳回 PolygonMultiPolygon 執行個體。

注意

因為 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. 在一維地理位置執行個體上,以 parameter_value < 0 呼叫 STBuffer()

下列範例會傳回空白 GeometryCollection 執行個體:

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

B. 在 Polygon 執行個體上,以 parameter_value < 0 呼叫 STBuffer()

下列範例會傳回具有負數緩衝的 Polygon 執行個體:

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

C. 在 CurvePolygon 執行個體上,以 parameter_value < 0 呼叫 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. 以 parameter_value = 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. 以 parameter_value > 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 方法