このトピックでは、Trajectory SQLの基本概念を紹介します。
軌道オブジェクト
コンセプト | 説明 |
軌道ポイント | 時空間オブジェクトは、特定の時点での移動オブジェクトの空間位置と属性で構成されます。 空間的位置は、2D 座標または 3D 座標で表すことができます。 属性は、異なるデータ型を使用するいくつかのフィールドとすることができる。 |
軌道オブジェクト | 軌道点とイベントで構成される高次元オブジェクト。 具体的には、高次元オブジェクトは、時間、空間、属性、およびイベントを含む。 |
軌道タイムライン | 軌道の時間値シーケンス。 シーケンス内の時間値は連続している必要があります。 |
軌道空間 | 軌道の空間ジオメトリ。 ほとんどの場合、空間ジオメトリはLineStringデータ型を使用して記述されます。 |
軌道リーフ | 特定の時点での移動オブジェクトの空間位置。 空間位置は軌道点である。 |
軌跡属性 | 異なる軌道点における移動オブジェクトの軌道を記述する属性。 これらの属性は、速度および方向を含む。 |
Trajectory属性フィールド | 移動オブジェクトの軌跡を記述する属性フィールド。 速度フィールドなどの属性フィールドの値の数は、移動オブジェクトの軌道点の数と同じである。 |
軌道フィールド値 | 特定の時点での属性フィールドの値。 |
軌道イベント | 軌道に沿って発生するイベント。 例えば、これらのイベントは、軌道に沿って移動するかごの給油、故障、およびかごロックイベントを含む。 イベントは、イベントタイプIDとイベント時刻で構成されます。 |
次の図は、移動オブジェクトの軌跡を示しています。
BoxNDFオブジェクト
軌道およびジオメトリを含む軌道関連オブジェクトの計算は複雑である。 キューブは、これらの軌道関連オブジェクトよりも計算が容易であり、クエリを記述したり、計算操作を単純化したりするために使用できます。 BoxNDFデータ型は、キューブを記述するために使用されます。
BoxNDFオブジェクトは、x、y、z、t
の4つの座標軸上の最小値と最大値で表される多次元の時空間立方体です。 z軸は空間を表し、t軸は時間を表す。 キューブは、異なる軸を含むことができる。 例えば、立方体は、x軸およびy軸を含むことができ、またはx軸、y軸、z軸、およびt軸を含むことができる。
クエリを実行するときに、キューブを使用してクエリの範囲を指定できます。 さらに、クエリを容易にするために、軌跡またはジオメトリの境界ボックスを使用できます。 次の図は、x軸、y軸、およびt軸
上を移動するオブジェクトの軌道と境界ボックスを示しています。
次の図は、オブジェクトの境界ボックスを示しています。
PostgreSQLの時間値のデータ型
PostgreSQLは、時間値に対して次のデータ型をサポートします。
TIMESTAMPTZ: タイムゾーンに関する情報を含む時間値。
TIMESTAMP: タイムゾーンに関する情報を含まない時間値。
インターバル: 時間範囲。
Ganosの軌道モジュールでは、TIMESTAMPタイプが使用され、INTERVALタイプが計算を容易にするために使用されます。 ほとんどの場合、TIMESTAMP値は、2000-01-01 10:00:00
などの文字列として表されます。 次のステートメントは、時間値に対する一般的な操作を示します。
− TIMESTAMPタイプの時間値を作成する。
SELECT '2000-01-01 10:00:00 '::timestamp;
-- UNIXタイムスタンプをtimestamp型の時間値に変換します。 ganos_trajectory拡張が必要です。
SELECT ST_UnixEpochToTS(1649765331);
-- TIMESTAMP型の時間値をUNIXタイムスタンプに変換します。
SELECT ST_TsToUnixEpoch('2022-04-12 12:08:51 ');
− INTERVAL型の値を時間値に加算するか、または時間値からINTERVAL型の値を減算する。
SELECT '2000-01-01 10:00:00 '::timestamp + '30 day'::interval;
SELECT '2000-01-01 10:00:00 '::timestamp - '1 month'::interval;
Geometriesガノス
Ganosのジオメトリは、2次元または3次元の点、線、またはポリゴンにすることができるオブジェクトです。 GanosはPostGISインターフェイスと互換性があります。 Ganosの軌道モジュールでは、軌道とジオメトリの間の複数の空間計算がサポートされています。
− 点 (2,4) を構築する。
SELECT 'POINT(2 4)'::geometry;
− 破線 (2,4) → (0,0) → (5,3) を作成する。
SELECT 'LINESTRING(2 4, 0 0, 5 3)';
-ポリゴンを作成します。 この例では、頂点が (3,3) 、(2,2) 、(5,5) である三角形が構築されます。
選択 'POLYGON(3 3, 5, 2 2, 3)';
-(0,1) を中心に半径3の円を作成します。 円は、多角形によって近似される。 ほとんどの場合、円の交点のクエリには、ST_BufferではなくST_DistanceWithinなどの関数が使用されます。
SELECT ST_Buffer('POINT(0 1)', 3);
2D空間では、上記のステートメントを直接使用できます。 ユークリッド距離は、いくつかのシナリオでは適切ではない。 緯度と経度を使用して表される2点間の距離を計算する場合、ユークリッド距離ではなく、地球の表面上の点間の距離を計算する必要があります。 場合によっては、距離をメートル単位で測定する必要があります。 空間参照識別子 (SRID) は、緯度および経度に対して4326に設定される。 SRID 4326は、世界測地システム1984 (WGS84) システムが使用されていることを示します。
− 点 (2,4) を構築する。
SELECT 'SRID=4326;POINT(2 4)'::geometry;
− 破線 (2,4) → (0,0) → (5,3) を作成する。
SELECT 'SRID=4326;LINESTRING(2 4、0 0、5 3)';
-ポリゴンを作成します。 この例では、頂点が (3,3) 、(2,2) 、(5,5) である三角形が構築されます。
SELECT 'SRID=4326;POLYGON(3 3, 5, 2 2, 3)';
-(0,1) を中心に半径3の円を作成します。 円は、多角形によって近似される。 ほとんどの場合、円の交点のクエリには、ST_BufferではなくST_DistanceWithinなどの関数が使用されます。
SELECT ST_SetSRID(ST_Buffer('POINT(0 1)', 3),4326);
点の座標は、投影座標系 (PCS) に基づいて変化する。 距離の計算を容易にするために、緯度と経度の座標をメートル単位の座標に変換できます。
-PCSをEPSG:3857に変換します。これは、Googleサービスなどのwebサービスによって普及した球面メルカトル投影座標系です。 このシステムでは、メーターを使用してポイントを測定します。 EPSG:3857は地図の適用で一般的です。
SELECT ST_Transform('SRID=4326;POINT(114 39) '::geometry, 3857);
-PCSをEPSG:4479に変換します。これは、中国向けのより正確なガウスクルーガー予測です。
SELECT ST_Transform('SRID=4326;POINT(114 39) '::geometry, 4479);