このトピックでは、ST_Buffer関数について説明します。 この関数は、入力ジオメトリオブジェクトを中心として、入力ジオメトリオブジェクトからの距離が指定された距離以下であるすべての点を表すジオメトリオブジェクトを返します。 返されるジオメトリオブジェクトは、入力ジオメトリオブジェクトを囲むバッファです。 ST_Buffer関数は、指定されたジオメトリオブジェクトの空間参照システム (SRS) に基づいて結果を計算します。
構文
ジオメトリST_Buffer (ジオメトリg1 , float radiusOfBuffer);
ジオメトリST_Buffer (ジオメトリg1、float radiusOfBuffer、整数numSegQuarterCircle);
ジオメトリST_Buffer (ジオメトリg1、float radiusOfBuffer、text bufferStyleParameters);
geography ST_Buffer(geography g1 , float radiusOfBufferInMeters);
geography ST_Buffer(geography g1、float radiusOfBuffer、整数numSegQuarterCircle);
geography ST_Buffer(geography g1、float radiusOfBuffer、text bufferStyleParameters);
パラメーター
パラメーター | 説明 |
g1 | 指定するジオメトリまたは地理オブジェクト。 |
radiusOfBuffer | バッファの半径。 このパラメーターは、ジオメトリオブジェクトを指定した場合にのみ有効です。 |
numSegQuarterCircle | 4分の1円を近似するために使用されるセグメントの数を指定します。 デフォルト値 : 7 |
bufferStyleParameters | バッファー。 このパラメーターの値は、スペースで区切られたキーと値のペアです。 |
radiusOfBufferInMeters | バッファの半径。 単位: メートル。 このパラメーターは、geographyオブジェクトを指定した場合にのみ有効です。 |
説明
- ポリゴンオブジェクトを指定し、バッファの半径を負の値に設定した場合、ST_Buffer関数はオブジェクトを拡張するのではなく、ポリゴンオブジェクトをスケーリングします。
- geographyオブジェクトを指定した場合、バッファの半径は、geographyオブジェクトのSRSで指定された単位で測定されます。
- geographyオブジェクトを指定した場合、ST_Buffer関数はジオメトリオブジェクトのラッパーになります。 ST_Buffer関数は、まず、地理オブジェクトの境界ボックスに適合する適切な空間参照識別子 (SRID) を選択する。 座標系の場合、ST_Buffer関数は、ユニバーサル横断メルカトル (UTM) 、ランベルト方位角等面積 (LAEA) 、またはユニバーサル極地立体 (UPS) を優先的に使用する。 最悪のシナリオでは、メルカトル投影が使用されます。 次に、ST_Buffer関数は、地理オブジェクトのSRS内のバッファを計算し、バッファを世界測地システム1984 (WGS84) 座標系に変換して戻す。
- ST_Buffer関数はz座標を無視します。 3Dジオメトリオブジェクトを指定しても、ST_Buffer関数はバッファを表す2Dジオメトリオブジェクトを返します。
- 場合によっては、半径検索にST_Buffer関数が使用されます。 ただし、半径検索用のバッファを作成すると、検索が遅く無意味になります。 半径検索にはST_DHithin関数を使用することを推奨します。
- 次の表に、bufferStyleParametersパラメーターのフィールドを示します。
フィールド | 説明 | データ型 | デフォルト値 | 説明 |
quad_segs | 4分の1円を近似するために使用されるセグメントの数。 | integer | 8 | より大きな値は、より滑らかな四分の一円を示す。 |
endcap | バッファーのendcapスタイル。The endcap style of the buffer. | String | round | 有効な値: round、flat、square。 |
join | バッファの結合スタイル。The join style of the buffer. | String | round | 有効な値: round、mitre、bevel。 |
mitre_limit | マイター比の限界。 | float | 5.0 | このパラメーターは、joinパラメーターをmitreに設定した場合にのみ有効です。 |
サイド | バッファの位置。 | String | -- | 有効な値: 両方、left、right。 このパラメーターを左または右に設定した場合、ST_Buffer関数は、線の方向を基準にしてバッファリングされた側で、入力ジオメトリオブジェクトに対して片面バッファを実行します。 このパラメーターは、LineStringオブジェクトを指定した場合にのみ有効です。 このパラメーターは、ポイントオブジェクトまたはポリゴンオブジェクトの結果には影響しません。 |
例
- quad_segsパラメーターの異なる値で返された結果:
SELECT ST_Buffer('POINT(0 0)'::geometry,1),ST_Buffer('POINT(3 0)'::geometry,1,'quad_segs=2 ');

- endcapパラメーターの異なる値で返される結果:
SELECT ST_Buffer('LINESTRING(0 0,0 3)'::geometry,1,'endcap=round') 、
ST_Buffer('LINESTRING(6 0,6 3)'::geometry,1,'endcap=flat') 、
ST_Buffer('LINESTRING (12 0,12 3)'::geometry,1,'endcap=square');

- 結合パラメータの異なる値で返される結果:
SELECT ST_Buffer('LINESTRING(0 0,3 0,3 3)'::geometry,1.2,'join=round') 、
ST_Buffer('LINESTRING(6 0,9 0,9 3)'::geometry,1.2,'join=mitre') 、
ST_Buffer('LINESTRING (12 0,15 0,15 3)'::geometry,1.2,'join=bevel');

- さまざまな値のmitre_limitパラメーターで返される結果:
SELECT ST_Buffer('LINESTRING(0 0,3 0,3 3)'::geometry,1.2,'join=mitre mitre_limit=1.0'),
ST_Buffer('LINESTRING(6 0,9 0,9 3)'::geometry,1.2,'join=mitre mitre_limit=0.5'),
ST_Buffer('LINESTRING (12 0,15 0,15 3)'::geometry,1.2,'join=mitre mitre_limit=0.1');

- サイドパラメータの異なる値で返される結果:
SELECT ST_Buffer('LINESTRING(0 0,3 0,3 3,0 3)'::geometry,1,'side=both') 、
ST_Buffer('LINESTRING(6 0,9 0,9 3,6 3)'::geometry,1,'side=right') 、
ST_Buffer('LINESTRING (12 0,15 0,15 3,12 3)'::geometry,1,'side=left');
