ST_Buffer — (T) ジオメトリ: このジオメトリからの距離が指定された距離以下となるポイント全てを表現するジオメトリを返します。計算は、ジオメトリの空間参照系で行われます。ジオグラフィ: 平面変換ラッパを使います。形状制御のために異なる終端キャップと継ぎ目の設定のサポートが1.5で導入されました。buffer_styleオプションは、quad_segs=#,endcap=round|flat|square,join=round|mitre|bevel,mitre_limit=#.# となります。
geometry ST_Buffer(
geometry g1, float radius_of_buffer)
;
geometry ST_Buffer(
geometry g1, float radius_of_buffer, integer num_seg_quarter_circle)
;
geometry ST_Buffer(
geometry g1, float radius_of_buffer, text buffer_style_parameters)
;
geography ST_Buffer(
geography g1, float radius_of_buffer_in_meters)
;
このジオメトリ/ジオグラフィからの距離が指定された距離以下となるポイント全てを表現するジオメトリ/ジオグラフィを返します。
ジオメトリ: 計算は、ジオメトリの空間参照系で行われます。形状制御のために異なる終端キャップと継ぎ目を設定する機能が1.5で導入されました。
負の半径: ポリゴンでは、負の半径が使えます。ポリゴンを拡張させずに縮小させることができます。 |
ジオグラフィ: ジオメトリ実装にかぶさる、薄いラッパです。ジオグラフィオブジェクトのバウンディングボックスに最適なSRIDを決定し(UTMが望ましいですが、ランベルト正積方位図法(北/南)、最悪のシナリオでメルカトルに頼ります)、その平面でバッファを生成し、WGS84ジオグラフィに戻します。 |
ジオグラフィでは、オブジェクトが2つのUTMゾーンをまたいだり、日付変更線をまたぐような、相当に大きい場合には、期待した通りの動作をないかも知れません。
初出: 1.5 - ST_Bufferが異なる終端と継ぎ目の型に対応するよう強化されました。たとえば、道路ラインストリングを、丸の代わりに平坦や四角形の終端を持つ道路ポリゴンに変換するのに使います。ジオグラフィ用の薄いラッパが追加されました。最新のジオメトリ機能の利点を得るにはGEOS 3.2以上が必要です。
第3引数(現在ジオメトリしか適用できません)で、4分の1円に近づけるための区分数を指定でき(整数の場合、デフォルトは8です)、また、空白区切りのkey=valueペア(文字列の場合)を、次に示す操作として指定することができます。
'quad_segs=#' : number of segments used to approximate a quarter circle (defaults to 8).
'endcap=round|flat|square' : endcap style (defaults to "round", needs GEOS-3.2 or higher for a different value). 'butt' is also accepted as a synonym for 'flat'.
'join=round|mitre|bevel' : join style (defaults to "round", needs GEOS-3.2 or higher for a different value). 'miter' is also accepted as a synonym for 'mitre'.
'mitre_limit=#.#' : mitre ratio limit (only affects mitred join style). 'miter_limit' is also accepted as a synonym for 'mitre_limit'.
半径の単位は空間参照系の単位です。
入力は、POINT, MULTIPOINT, LINESTRING, MULTILINESTRING, POLYGON, MULTIPOLYGON, GEOMETRYCOLLECTIONが可能です。
この関数は第3次元(Z軸)は無視し、3次元ジオメトリが与えられても、常に2次元バッファを返します。 |
GEOSモジュールで実現しています。
このメソッドはOpenGIS Simple Features Implementation Specification for SQL 1.1.の実装です s2.1.1.3
このメソッドはSQL/MM仕様の実装です。 SQL-MM 3: 5.1.17
この関数を半径探索に使おうとして失敗する人がいらっしゃいます。バッファを生成して半径探索に使うのと遅いし無意味です。ST_DWithinを使います。 |
SELECT ST_Buffer( ST_GeomFromText('POINT(100 90)'), 50, 'quad_segs=8');
|
SELECT ST_Buffer( ST_GeomFromText('POINT(100 90)'), 50, 'quad_segs=2');
| |
SELECT ST_Buffer( ST_GeomFromText( 'LINESTRING(50 50,150 150,150 50)' ), 10, 'endcap=round join=round');
|
SELECT ST_Buffer( ST_GeomFromText( 'LINESTRING(50 50,150 150,150 50)' ), 10, 'endcap=square join=round');
|
SELECT ST_Buffer( ST_GeomFromText( 'LINESTRING(50 50,150 150,150 50)' ), 10, 'endcap=flat join=round');
|
SELECT ST_Buffer( ST_GeomFromText( 'LINESTRING(50 50,150 150,150 50)' ), 10, 'join=bevel');
|
SELECT ST_Buffer( ST_GeomFromText( 'LINESTRING(50 50,150 150,150 50)' ), 10, 'join=mitre mitre_limit=5.0');
|
SELECT ST_Buffer( ST_GeomFromText( 'LINESTRING(50 50,150 150,150 50)' ), 10, 'join=mitre mitre_limit=1.0');
|
-- 近似円バッファ -- 近似を強制するバッファされたポイント(ダイアグラム参照) -- 円にポイント2つは8辺のポリゴン(ダイアグラム参照) SELECT ST_NPoints(ST_Buffer(ST_GeomFromText('POINT(100 90)'), 50)) As promisingcircle_pcount, ST_NPoints(ST_Buffer(ST_GeomFromText('POINT(100 90)'), 50, 2)) As lamecircle_pcount; promisingcircle_pcount | lamecircle_pcount ------------------------+------------------- 33 | 9 -- 手軽だが不十分な円(4分の1円で2点だけの八角形) -- 次に示すのは100メートルの八角形です。 -- 座標系は、メートル単位マサチューセッツ州平面に変換したNAD 83経度緯度で、 -- メートルでバッファを取っています。 SELECT ST_AsText(ST_Buffer( ST_Transform( ST_SetSRID(ST_MakePoint(-71.063526, 42.35785),4269), 26986) ,100,2)) As octagon; ---------------------- POLYGON((236057.59057465 900908.759918696,236028.301252769 900838.049240578,235 957.59057465 900808.759918696,235886.879896532 900838.049240578,235857.59057465 900908.759918696,235886.879896532 900979.470596815,235957.59057465 901008.759918 696,236028.301252769 900979.470596815,236057.59057465 900908.759918696))