Menggabungkan beberapa lintasan menjadi satu.
Sintaksis
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);Parameter
Parameter | Deskripsi |
trajs | Kolom lintasan atau array lintasan yang akan diagregasi. |
doSort | Apakah akan mengurutkan titik-titik lintasan dalam lintasan hasil. Nilai default: |
doDeduplicate | Apakah akan menghapus titik-titik duplikat dari lintasan hasil. Nilai default: |
Nilai Pengembalian
Lintasan yang telah digabungkan.
Deskripsi
Fungsi ini digunakan untuk menggabungkan beberapa lintasan menjadi satu.
Anda dapat menggunakan parameter doSort untuk mengurutkan lintasan gabungan dan titik-titik lintasan. Selain itu, gunakan parameter doDeduplicate untuk menggabungkan titik-titik lintasan duplikat dari lintasan berdekatan. Sebagai contoh, jika titik akhir sebuah lintasan merupakan titik awal lintasan lainnya, kedua titik tersebut dapat digabungkan.
Kami merekomendasikan Anda menetapkan doSort dan doDeduplicate ke true, yang merupakan nilai default. Meskipun performa sedikit terpengaruh, akurasi hasil akan tetap terjamin.
Contoh
Siapkan data:
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);Skenario:
Jangan urutkan titik-titik dalam hasil atau hapus titik-titik duplikat:
SELECT st_TrajMerge(traj, false, false) FROM test_trajs_merge;Hasil sampel berikut berisi titik-titik duplikat dan cap waktu tidak diurutkan dengan benar:
{"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"]}}Urutkan titik-titik dalam hasil tetapi jangan hapus titik-titik duplikat:
SELECT st_TrajMerge(traj, true, false) FROM test_trajs_merge;Hasil sampel berikut berisi titik-titik duplikat, tetapi semua titik dalam hasil diatur dengan benar berdasarkan waktu:
{"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"]}}Hapus titik-titik duplikat tetapi jangan urutkan titik-titik dalam hasil:
SELECT st_TrajMerge(traj, false, true) FROM test_trajs_merge;Hasil sampel berikut berisi cap waktu yang tidak berurutan yang titik duplikatnya tidak dihapus:
{"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"]}}Hapus titik-titik duplikat dan urutkan titik-titik dalam hasil:
SELECT st_TrajMerge(traj) FROM test_trajs_merge;Hasil sampel:
{"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"]}}Gabungkan lintasan dari array lintasan. Hapus titik-titik duplikat dan urutkan titik-titik dalam hasil:
SELECT st_TrajMerge(array_agg(traj), true, true) FROM test_trajs_merge;Hasil sampel:
{"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"]}}