全部产品
Search
文档中心

:ST_TrajMerge

更新时间:Jul 02, 2025

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: true.

doDeduplicate

Apakah akan menghapus titik-titik duplikat dari lintasan hasil. Nilai default: true.

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

  1. 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);
  2. 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"]}}