Share via


STBuffer (geometry データ型)

適用対象:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceMicrosoft Fabric の SQL 分析エンドポイントMicrosoft Fabric のウェアハウス

geometry インスタンスからの距離が指定した値以下となる、すべての地点の和集合を表すジオメトリック オブジェクトを返します。

構文

  
.STBuffer ( distance )  

Note

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 のときは、Polygon または MultiPolygon インスタンスが返されます。

注意

distance は float であるため、非常に小さな値は計算においてゼロと同一視されることがあります。 その場合、呼び出し元の geometry インスタンスのコピーが返されます。 「float 型と real 型 (Transact-SQL)」を参照してください。

distance = 0 のときは、呼び出し元の geometry インスタンスのコピーが返されます。

"distance" < 0 の場合、

  • インスタンスのディメンションが 0 または 1 であれば、空の GeometryCollection インスタンスが返されます。

  • インスタンスのディメンションが 2 以上のとき、負の値のバッファーが返されます。

    Note

    負の値のバッファーでは、空の GeometryCollection インスタンスが作成されることもあります。

バッファーに負の値を指定すると、geometry インスタンスの境界から、指定された距離の範囲内にある地点がすべて削除されます。

理論上のバッファーと計算されたバッファーの間の誤差は、max(tolerance, extents * 1.E-7) です。tolerance は distance * .001 になります。 エクステントの詳細については、「geometry データ型メソッド リファレンス」を参照してください。

A. 1 次元の geometry インスタンスに対して、 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();

Note

CurvePolygon インスタンスの代わりに Polygon インスタンスが返されます。 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. パラメーターに 0 を指定して STBuffer() を呼び出す

次の例では、呼び出し元の geometry インスタンスのコピーが返されます。

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

F. パラメーターに 0 以外の非常に小さい値を指定して、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();

Note

前の 2 つの例では、文字列リテラルを STBuffer() に渡しています。 最初の方の例は、文字列リテラルを数値に変換できるので機能します。 一方、2 番目の例では ArgumentException がスローされます。

I. MultiPoint インスタンスに対して STBuffer() を呼び出す

次の例では、2 つの MultiPolygon インスタンスと 1 つの 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();

最初の 2 つの SELECT ステートメントでは、distance が (1 1) と (1 4) の 2 つの地点の距離の 1/2 以下であるため、MultiPolygon インスタンスが返されます。 3 番目の SELECT ステートメントでは、(1 1) と (1 4) の 2 つの地点のバッファーに格納されたインスタンスが重なるため、Polygon インスタンスが返されます。

参照

BufferWithTolerance (geometry データ型)
Geometry インスタンスの OGC メソッド