geometry インスタンスからの距離が指定した値以下となる、すべての地点の和集合を表すジオメトリック オブジェクトを返します。
構文
.STBuffer ( distance )
引数
- distance
geometry インスタンスからのバッファーの幅の距離を指定するための float (.NET Framework では double) 型の値です。
戻り値の型
SQL Server の戻り値の型:geometry
CLR の戻り値の型: SqlGeometry
説明
STBuffer() は、tolerance = distance * .001 および relative = false を指定して BufferWithTolerance を呼び出すのと同様の方法でバッファーを計算します。
distance > 0 の場合、Polygon インスタンスまたは MultiPolygon インスタンスが返されます。
注 |
|---|
distance は float であるため、非常に小さい値は計算時に 0 と見なされることがあります。 その場合、呼び出し元の geometry インスタンスのコピーが返されます。 「float 型と real 型 (Transact-SQL)」を参照してください。 |
distance = 0 の場合、呼び出し元の geometry インスタンスのコピーが返されます。
distance < 0 の場合
インスタンスの次元数が 0 または 1 のとき、空の GeometryCollection インスタンスが返されます。
インスタンスの次元数が 2 以上のとき、負の値のバッファーが返されます。
注バッファーが負の値であると、空の GeometryCollection インスタンスが作成される可能性もあります。
バッファーに負の値を指定すると、geometry インスタンスの境界から、指定された距離の範囲内にある地点がすべて削除されます。
理論上のバッファーと計算されたバッファー間の誤差は max(tolerance, extents * 1.E-7) であり、ここで tolerance = distance * .001 です。 extents の詳細については、「geometry データ型メソッド リファレンス」を参照してください。
使用例
A. 1 次元の geometry インスタンスに対して、パラメーターに 0 を下回る (< 0) 値を指定して、STBuffer() を呼び出す
次の例では、空の GeometryCollection インスタンスが返されます。
DECLARE @g geometry= 'LINESTRING(3 4, 8 11)';
SELECT @g.STBuffer(-1).ToString();
B. Polygon インスタンスに対して、パラメーターに 0 を下回る (< 0) 値を指定して、STBuffer() を呼び出す
次の例では、バッファーが負の値の Polygon インスタンスが返されます。
DECLARE @g geometry = 'POLYGON((1 1, 1 5, 5 5, 5 1, 1 1))';
SELECT @g.STBuffer(-1).ToString();
C. CurvePolygon インスタンスに対して、パラメーターに 0 を下回る (< 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();
注 |
|---|
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. パラメーターに 0 を上回る (> 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();
注 |
|---|
前の 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 データ型)