傳回幾何物件,此物件表示與 geometry 例項之間的距離小於或等於指定值之所有點的聯集。
語法
.STBuffer ( distance )
引數
- 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。 如需有關 extents 的詳細資訊,請參閱<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()
下列範例會從 CurvePolygon 執行個體傳回具有負數緩衝的 Polygon 執行個體:
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 資料類型)