複数の軌道を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 | 結果軌道内の軌道ポイントをソートするかどうか。 デフォルト値: |
doDeduplicate | 結果の軌跡から重複点を削除するかどうか。 デフォルト値: |
戻り値
マージされた軌道。
説明
この関数を使用して、複数の軌道を1つにマージできます。
doSortパラメーターを使用して、マージされた軌道と軌道ポイントをソートできます。 doDeduplicateパラメーターを使用して、隣接する軌道の重複軌道ポイントをマージすることもできます。 例えば、軌道の終点が別の軌道の始点である場合、これらの点をマージすることができる。
doSortとdoDeduplicateをデフォルト値であるtrueに設定することを推奨します。 パフォーマンスはわずかに影響を受けますが、結果の精度は保証されます。
例:
データを準備する:
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);
シナリオ
結果のポイントを並べ替えたり、重複したポイントを削除したりしないでください。
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"]}}