すべてのプロダクト
Search
ドキュメントセンター

ApsaraDB RDS:ST_TrajMerge

最終更新日:Dec 11, 2024

複数の軌道を1つにマージします。

構文

trajectory ST_TrajMerge (trajectory SET_ trajs);
trajectory ST_TrajMerge (trajectory SET trajs, bool doSort, bool doDeduplicate);
trajectory ST_TrajMerge (trajectory[] trajs, bool doSort default true, bool doDeduplicate default true);

パラメーター

パラメーター

説明

trajs

集計する軌道列または軌道配列。

doSort

結果軌道内の軌道ポイントをソートするかどうか。 デフォルト値: true

doDeduplicate

結果の軌跡から重複点を削除するかどうか。 デフォルト値: true

戻り値

マージされた軌道。

説明

  • この関数を使用して、複数の軌道を1つにマージできます。

  • doSortパラメーターを使用して、マージされた軌道と軌道ポイントをソートできます。 doDeduplicateパラメーターを使用して、隣接する軌道の重複軌道ポイントをマージすることもできます。 例えば、軌道の終点が別の軌道の始点である場合、これらの点をマージすることができる。

  • doSortとdoDeduplicateをデフォルト値であるtrueに設定することを推奨します。 パフォーマンスはわずかに影響を受けますが、結果の精度は保証されます。

例:

  1. データを準備する:

    CREATE TABLE test_trajs_merge(traj trajectory);
    INSERT INTO test_trajs_merge
    VALUES 
        ('{"trajectory":{"version":1,"type":"STPOINT","leafcount":2,"start_time":"2000-01-01 00:00:00","end_time":"2000-01-02 00:00:00","spatial":"LINESTRING(0 0,4 0)","timeline":["2000-01-01 00:00:00","2000-01-02 00:00:00"]}}'),
        ('{"trajectory":{"version":1,"type":"STPOINT","leafcount":2,"start_time":"2000-01-02 00:00:00","end_time":"2000-01-03 00:00:00","spatial":"LINESTRING(4 0,2 0)","timeline":["2000-01-02 00:00:00","2000-01-03 00:00:00"]}}'),
        ('{"trajectory":{"version":1,"type":"STPOINT","leafcount":2,"start_time":"2000-01-04 00:00:00","end_time":"2000-01-05 00:00:00","spatial":"LINESTRING(2 2,3 3)","timeline":["2000-01-04 00:00:00","2000-01-05 00:00:00"]}}'),
        ('{"trajectory":{"version":1,"type":"STPOINT","leafcount":2,"start_time":"2000-01-03 00:00:00","end_time":"2000-01-04 00:00:00","spatial":"LINESTRING(3 0,2 2)","timeline":["2000-01-03 00:00:00","2000-01-04 00:00:00"]}}'),
        ('TRAJECTORY EMPTY'),
        (NULL);
  2. シナリオ

    • 結果のポイントを並べ替えたり、重複したポイントを削除したりしないでください。

      SELECT st_TrajMerge(traj, false, false) FROM test_trajs_merge;

      次のサンプル結果には重複ポイントが含まれており、タイムスタンプが正しくソートされていません。

       {"trajectory":{"version":1,"type":"STPOINT","leafcount":8,"start_time":"2000-01-01 00:00:00","end_time":"2000-01-05 00:00:00","spatial":"LINESTRING(0 0,4 0,4 0,2 0,2 2,3 3,3 0,2 2)","timeline":["2000-01-01 00:00:00","2000-01-02 00:00:00","2000-01-02 00:00:00","2000-01-03 00:00:00","2000-01-04 00:00:00","2000-01-05 00:00:00","2000-01-03 00:00:00","2000-01-04 00:00:00"]}}
    • 結果のポイントを並べ替えますが、重複したポイントを削除しないでください。

      SELECT st_TrajMerge(traj, true, false) FROM test_trajs_merge;

      次のサンプル結果には重複ポイントが含まれていますが、結果のすべてのポイントは時間ごとに正しく配置されています。

      {"trajectory":{"version":1,"type":"STPOINT","leafcount":8,"start_time":"2000-01-01 00:00:00","end_time":"2000-01-05 00:00:00","spatial":"LINESTRING(0 0,4 0,4 0,3 0,2 0,2 2,2 2,3 3)","timeline":["2000-01-01 00:00:00","2000-01-02 00:00:00","2000-01-02 00:00:00","2000-01-03 00:00:00","2000-01-03 00:00:00","2000-01-04 00:00:00","2000-01-04 00:00:00","2000-01-05 00:00:00"]}}
    • 重複したポイントを削除しますが、結果のポイントをソートしないでください。

      SELECT st_TrajMerge(traj, false, true) FROM test_trajs_merge;

      次のサンプル結果には、対応する重複ポイントが削除されていないアウトオブオーダータイムスタンプが含まれています。

      {"trajectory":{"version":1,"type":"STPOINT","leafcount":7,"start_time":"2000-01-01 00:00:00","end_time":"2000-01-04 00:00:00","spatial":"LINESTRING(0 0,4 0,2 0,2 2,3 3,3 0,2 2)","timeline":["2000-01-01 00:00:00","2000-01-02 00:00:00","2000-01-03 00:00:00","2000-01-04 00:00:00","2000-01-05 00:00:00","2000-01-03 00:00:00","2000-01-04 00:00:00"]}}
    • 重複したポイントを削除し、結果のポイントをソートします。

      SELECT st_TrajMerge(traj) FROM test_trajs_merge;

      サンプル結果:

      {"trajectory":{"version":1,"type":"STPOINT","leafcount":6,"start_time":"2000-01-01 00:00:00","end_time":"2000-01-05 00:00:00","spatial":"LINESTRING(0 0,4 0,3 0,2 0,2 2,3 3)","timeline":["2000-01-01 00:00:00","2000-01-02 00:00:00","2000-01-03 00:00:00","2000-01-03 00:00:00","2000-01-04 00:00:00","2000-01-05 00:00:00"]}}
    • 軌道配列の軌道をマージします。 重複したポイントを削除し、結果のポイントをソートします。

      SELECT st_TrajMerge(array_agg(traj), true, true) FROM test_trajs_merge;

      サンプル結果:

      {"trajectory":{"version":1,"type":"STPOINT","leafcount":6,"start_time":"2000-01-01 00:00:00","end_time":"2000-01-05 00:00:00","spatial":"LINESTRING(0 0,4 0,3 0,2 0,2 2,3 3)","timeline":["2000-01-01 00:00:00","2000-01-02 00:00:00","2000-01-03 00:00:00","2000-01-03 00:00:00","2000-01-04 00:00:00","2000-01-05 00:00:00"]}}