共用方式為


STBuffer (geometry 資料類型)

傳回幾何物件,此物件表示與 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 資料類型)

其他資源

幾何例項上的 OGC 方法