ジオメトリまたはトラジェクトリのバウンディングボックスを返します。必要に応じて、時間範囲で制約できます。
構文
boxndf ST_MakeBox(geometry geom);
boxndf ST_MakeBox(trajectory traj);
boxndf ST_MakeBox(geometry geom, timestamp ts, timestamp te);
boxndf ST_MakeBox(trajectory traj, timestamp ts, timestamp te);
boxndf ST_MakeBox(timestamp ts, timestamp te);パラメーター
| パラメーター | 説明 |
|---|---|
geom | バウンディングボックスを取得するジオメトリです。 |
traj | バウンディングボックスを取得するトラジェクトリです。 |
ts | 時間範囲の開始時刻です。 |
te | 時間範囲の終了時刻です。 |
説明
バウンディングボックスとは、空間・時間情報を含むオブジェクトを完全に包含する最小の多次元矩形です。
関数の動作は、使用するオーバーロードの種類によって異なります。
ジオメトリのみ —
ST_MakeBox(geometry geom):ジオメトリの次元(2D または 3D)に基づいた空間的なバウンディングボックスを返します。ジオメトリ+時間範囲 —
ST_MakeBox(geometry geom, timestamp ts, timestamp te):指定された時間範囲におけるジオメトリのバウンディングボックスを返します。トラジェクトリのみ —
ST_MakeBox(trajectory traj):トラジェクトリ全体のバウンディングボックスを返します。トラジェクトリ+時間範囲 —
ST_MakeBox(trajectory traj, timestamp ts, timestamp te):指定された時間範囲におけるサブトラジェクトリのバウンディングボックスを返します。時間範囲のみ —
ST_MakeBox(timestamp ts, timestamp te):指定された時間範囲に対応するバウンディングボックスを返します。
注: バウンディングボックスには FLOAT データの型が使用されます。返されるボックスは、入力値と厳密には一致せず、若干大きくなる場合があります。つまり、下限値は実際の下限よりわずかに小さく、上限値は実際の上限よりわずかに大きくなることがあります。
例
ジオメトリのバウンディングボックス
以下の例では、時間範囲を指定する場合と指定しない場合の、ポリゴンのバウンディングボックスをそれぞれ計算しています。
WITH geom AS (
SELECT (
'POLYGON((12.7243236691148 4.35238368367118,12.9102992732078 1.49748113937676,' ||
'12.5926592946053 1.67643963359296,12.0197574747333 3.19258554889152,' ||
'12.7243236691148 4.35238368367118))'
)::geometry a
)
SELECT
-- 空間的なバウンディングボックスのみ(BOX2D)
ST_MakeBox(a),
-- 時間範囲を含む空間・時間的バウンディングボックス(BOX2DT)
ST_MakeBox(a, '2000-01-01 00:00:10'::timestamp, '2000-01-01 02:13:20'::timestamp)
FROM geom;期待される出力:
st_makebox | st_makebox
----------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------
BOX2D(12.0197572708 1.49748110771,12.9102993011 4.35238409042) | BOX2DT(12.0197572708 1.49748110771 2000-01-01 00:00:09.999999,12.9102993011 4.35238409042 2000-01-01 02:13:20.000381)トラジェクトリのバウンディングボックス
以下の例では、時間範囲を指定する場合と指定しない場合の、トラジェクトリのバウンディングボックスをそれぞれ計算しています。
WITH traj AS (
SELECT ST_makeTrajectory(
'STPOINT',
'LINESTRING(0 0, 50 50, 100 100)'::geometry,
tsrange('2000-01-01 00:00:00'::timestamp, '2000-01-01 00:01:40'::timestamp),
'{"leafcount":3,"attributes":{"velocity":{"type":"integer","length":2,"nullable":true,"value":[120,130,140]},"accuracy":{"type":"float","length":4,"nullable":false,"value":[120,130,140]},"bearing":{"type":"float","length":8,"nullable":false,"value":[120,130,140]},"acceleration":{"type":"string","length":20,"nullable":true,"value":["120","130","140"]},"active":{"type":"timestamp","nullable":false,"value":["Fri Jan 01 11:35:00 2010","Fri Jan 01 12:35:00 2010","Fri Jan 01 13:30:00 2010"]}},"events":[{"2":"Fri Jan 02 15:00:00 2010"},{"3":"Fri Jan 02 15:30:00 2010"}]}'
) a
)
SELECT
-- トラジェクトリ全体のバウンディングボックス(BOX2DT)
ST_MakeBox(a),
-- 時間範囲内のサブトラジェクトリのバウンディングボックス(BOX2DT)
ST_MakeBox(a, '1999-12-31 23:00:00'::timestamp, '2000-01-01 00:00:30'::timestamp)
FROM traj;期待される出力:
st_makebox | st_makebox
-------------------------------------------------------------+------------------------------------------------------------------
BOX2DT(0 0 2000-01-01 00:00:00,100 100 2000-01-01 00:01:40) | BOX2DT(0 0 2000-01-01 00:00:00,30 30 2000-01-01 00:00:30.000001)