このトピックでは、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: タイムゾーンに関する情報を含まない時間値。
インターバル: 時間範囲。
軌道モジュールの GanosBaseでは、TIMESTAMPタイプが使用され、INTERVALタイプはコンピューティングを容易にするために使用されます。 ほとんどの場合、TIMESTAMP値は、2000-01-01 10:00:00
のような文字列として表されます。 次のステートメントは、時間値に対する一般的な操作を示します。
-- Create a time value of the TIMESTAMP type.
SELECT '2000-01-01 10:00:00'::timestamp;
-- Convert a UNIX timestamp to a time value of the TIMESTAMP type. The ganos_trajectory extension is required.
SELECT ST_UnixEpochToTS(1649765331);
-- Convert a time value of the TIMESTAMP type to a UNIX timestamp.
SELECT ST_TsToUnixEpoch('2022-04-12 12:08:51');
-- Add a value of the INTERVAL type to a time value or subtract a value of the INTERVAL type from a time value.
SELECT '2000-01-01 10:00:00'::timestamp + '30 day'::interval;
SELECT '2000-01-01 10:00:00'::timestamp - '1 month'::interval;
でのGeometries GanosBase
のジオメトリ GanosBaseは、2次元または3次元の点、線、または多角形のオブジェクトです。 GanosBaseはPostGISインターフェイスと互換性があります。 軌道モジュールの GanosBaseでは、軌道とジオメトリ間の複数の空間計算がサポートされています。
-- Construct a point (2,4).
SELECT 'POINT(2 4)'::geometry;
-- Construct a broken line (2,4)->(0,0)->(5,3).
SELECT 'LINESTRING(2 4, 0 0, 5 3)';
-- Construct a polygon. In this example, a triangle whose vertices are (3,3), (2,2), and (5,5) is constructed.
SELECT 'POLYGON(3 3, 5 5, 2 2, 3 3)';
-- Construct a circle with (0,1) as the center and a radius of 3. The circle is approximated by a polygon. In most cases, functions such as ST_DistanceWithin rather than ST_Buffer are used to query the intersections of circles.
SELECT ST_Buffer('POINT(0 1)', 3);
2D空間では、上記のステートメントを直接使用できます。 ユークリッド距離は、いくつかのシナリオでは適切ではない。 緯度と経度を使用して表される2点間の距離を計算する場合、ユークリッド距離ではなく、地球の表面上の点間の距離を計算する必要があります。 場合によっては、距離をメートル単位で測定する必要があります。 空間参照識別子 (SRID) は、緯度および経度に対して4326に設定される。 SRID 4326は、世界測地システム1984 (WGS84) システムが使用されていることを示します。
-- Construct a point (2,4).
SELECT 'SRID=4326;POINT(2 4)'::geometry;
-- Construct a broken line (2,4)->(0,0)->(5,3).
SELECT 'SRID=4326;LINESTRING(2 4, 0 0, 5 3)';
-- Construct a polygon. In this example, a triangle whose vertices are (3,3), (2,2), and (5,5) is constructed.
SELECT 'SRID=4326;POLYGON(3 3, 5 5, 2 2, 3 3)';
-- Construct a circle with (0,1) as the center and a radius of 3. The circle is approximated by a polygon. In most cases, functions such as ST_DistanceWithin rather than ST_Buffer are used to query the intersections of circles.
SELECT ST_SetSRID(ST_Buffer('POINT(0 1)', 3),4326);
点の座標は、投影座標系 (PCS) に基づいて変化する。 距離の計算を容易にするために、緯度と経度の座標をメートル単位の座標に変換できます。
-- Convert the PCS to EPSG:3857, which is a Spherical Mercator projected coordinate system popularized by web services such as Google services. In this system, meters are used to measure points. EPSG:3857 is commonly used in map applications.
SELECT ST_Transform('SRID=4326;POINT(114 39)'::geometry, 3857);
-- Convert the PCS to EPSG:4479, a more accurate Gauss Kruger projection for China.
SELECT ST_Transform('SRID=4326;POINT(114 39)'::geometry, 4479);