Trajectory SQL は、PolarDB for Oracle に対する拡張機能であり、時系列的に移動するオブジェクトの動きをモデル化・クエリするための仕組みです。本ページでは、Trajectory SQL を使用する際に登場するコアとなるデータ型および概念を定義します。
トラジェクトリオブジェクト
トラジェクトリオブジェクトは、車両、人物、または時間とともに位置が変化するその他のエンティティなど、移動するオブジェクトの完全な移動履歴を記録します。これは、トラジェクトリポイントおよびイベントから構成される高次元構造であり、時間、空間、属性、イベントという 4 つのディメンションをカバーします。
以下の表に、トラジェクトリオブジェクトの各コンポーネントを定義します。
| 用語 | 説明 |
|---|---|
| トラジェクトリポイント | 移動するオブジェクトのある特定の時刻におけるスナップショットです。各ポイントは、オブジェクトの空間的位置(2 次元または 3 次元座標)および異なるデータ型を用いた任意の数の属性フィールドを記録します。 |
| トラジェクトリオブジェクト | 移動するオブジェクトの完全な時空間的レコードです。トラジェクトリポイントおよびイベントから構成され、時間、空間、属性、イベントをカバーします。 |
| トラジェクトリタイムライン | トラジェクトリ内のタイムスタンプの順序付きシーケンスです。タイムスタンプは連続していなければならず、ギャップや時系列外の値は許容されません。 |
| トラジェクトリ空間 | トラジェクトリの空間的ジオメトリで、通常はすべてのトラジェクトリポイントを順に接続した LineString として表現されます。ほとんどの場合、このデータの型が空間的ジオメトリを記述するために使用されます。 |
| トラジェクトリリーフ | 移動するオブジェクトがある特定の時刻における空間的位置です。この空間的位置は、トラジェクトリポイントです。 |
| トラジェクトリアトリビュート | 各トラジェクトリポイントで記録される時変属性で、速度や方向などが該当します。 |
| トラジェクトリアトリビュートフィールド | 名前付きの属性チャンネルであり、各トラジェクトリポイントごとに 1 つの値を記録します。たとえば、速度フィールドは車両のルート上にあるすべてのポイントで速度の測定値を格納し、方向フィールドは各ポイントでヘディング角度を格納します。属性フィールド内の値の数は、トラジェクトリ内のトラジェクトリポイントの数と等しくなります。 |
| トラジェクトリフィールド値 | 特定のトラジェクトリアトリビュートフィールドにおける特定の時刻の値です。たとえば、速度フィールドにおける 14:32:05 の速度測定値、または方向フィールドにおける同一時刻のヘディング角度です。 |
| トラジェクトリイベント | 通常の属性サンプリングでは捉えきれない、トラジェクトリ上で離散的に発生する事象です。車両のトラジェクトリの場合、給油、機能停止、車両ロックなどのイベントが該当します。各イベントは、イベントタイプ ID およびイベント時間によって識別されます。 |
以下の図は、移動するオブジェクトのトラジェクトリを示しています。

これらの用語の関係性
トラジェクトリオブジェクトは最上位の構造です。以下から構成されます。
トラジェクトリタイムライン — 時間軸であり、各観測がいつ発生したかを定義します。上記の図では、タイムラインはオブジェクトの経路に沿ったタイムスタンプのシーケンスに対応します。
トラジェクトリ空間 — 空間軸であり、すべての空間的位置を LineString として接続します。上記の図では、これは連続した経路線です。
トラジェクトリアトリビュート — 速度や方向などの 1 つ以上の属性フィールドであり、それぞれがタイムライン上の各ポイントに対して 1 つの値を記録します。
トラジェクトリイベント — 定期的なサンプリング間隔を超えて発生する不規則な事象(例:給油停止)であり、イベントタイプ ID およびイベント時間とともに記録されます。
タイムライン上の各位置は、トラジェクトリポイントに対応し、これは位置(トラジェクトリリーフ)とその時点での属性値(トラジェクトリフィールド値)を統合したものです。
BoxNDF オブジェクト
トラジェクトリおよびジオメトリオブジェクトは構造的に複雑であるため、特定のクエリが計算コストを要することがあります。クエリを簡素化するために、Trajectory SQL では BoxNDF データの型を提供します。これは、トラジェクトリまたはジオメトリの範囲を近似する多軸時空間キューブです。
BoxNDF オブジェクトは、最大で 4 つの軸における最小値および最大値によって定義されます。
| 軸 | ディメンション |
|---|---|
| x | スペース |
| y | 空間 |
| z | スペース |
| t | 時間 |
4 つの軸すべてが必要なわけではありません。BoxNDF は任意の組み合わせをカバーできます。たとえば、2 次元空間クエリ向けの (x, y) バウンディングボックス、時間範囲を含む 2 次元空間クエリ向けの (x, y, t) バウンディングボックス、または完全な 4 次元クエリ向けの (x, y, z, t) バウンディングボックスなどです。
クエリを実行する際には、BoxNDF キューブを用いてクエリ範囲を指定できます。また、トラジェクトリまたはジオメトリ型のバウンディングボックスを用いることで、クエリをさらに容易にすることも可能です。
以下の図は、x 軸、y 軸、t 軸上で移動するオブジェクトのトラジェクトリおよびそのバウンディングボックスを示しています。
