全部产品
Search
文档中心

ApsaraDB RDS:ST_makeTrajectory

更新时间:Jun 25, 2025

Topik ini menjelaskan fungsi ST_makeTrajectory, yang digunakan untuk membangun objek trajektori.

Sintaksis

  • Sintaksis 1

    trajectory  ST_makeTrajectory (leaftype type, geometry spatial, tsrange timespan , cstring attrs_json);
  • Sintaksis 2

    trajectory  ST_makeTrajectory (leaftype type, geometry spatial, timestamp start,  timestamp end ,  cstring attrs_json);
  • Sintaksis 3

    trajectory  ST_makeTrajectory (leaftype type, geometry spatial, timestamp[]  timeline, cstringattrs_json );
  • Sintaksis 4

    trajectory  ST_makeTrajectory (leaftype type, float8[] x, float8[] y, integer srid, timestamp[] timeline, text[] attr_field_names, int4[] attr_int4, float8[] attr_float8, text[] attr_cstring , anyarrayattr_any );
  • Sintaksis 5

    trajectory  ST_makeTrajectory (anyarray rows, bool hasz, cstring[] attrnames); 

Parameter

Parameter

Deskripsi

type

Tipe dari trajektori. Hanya mendukung ST_POINT.

spatial

Objek geometri spasial dari trajektori, yang dijelaskan menggunakan objek LineString atau Point.

timespan

Rentang waktu dari trajektori. Rentang waktu adalah interval tertutup yang mencakup waktu mulai dan waktu akhir.

start

Waktu mulai dari trajektori.

end

Waktu akhir dari trajektori.

timeline

Garis waktu trajektori. Jumlah titik waktu harus sama dengan jumlah titik dalam objek LineString.

attrs_json

Atribut dan peristiwa trajektori dalam format JSON. Nilainya bisa null.

attr_field_names

Array dari nama-nama semua bidang atribut untuk trajektori.

x

Sumbu x untuk objek geometri spasial, yang merupakan array.

y

Sumbu y untuk objek geometri spasial, yang merupakan array.

srid

Pengenal referensi spasial (SRID) dari trajektori. Parameter ini wajib.

rows

Tabel yang digunakan untuk menyimpan trajektori. Nilai pada kolom pertama adalah tipe data timestamp, dan nilai pada kolom kedua dan ketiga adalah tipe data float8.

hasz

Menentukan apakah trajektori adalah trajektori tiga dimensi.

  • true: Trajektori adalah trajektori tiga dimensi. Nilai pada kolom keempat harus berupa tipe data float8.

  • false: Trajektori adalah trajektori dua dimensi. Nilai pada kolom keempat menunjukkan atribut trajektori.

attrnames

Nama atribut untuk trajektori. Jika parameter ini tidak ditentukan, nilai defaultnya adalah attr1, attr2....

  1. Contoh berikut menunjukkan format parameter attrs_json:

    {
      "leafcount": 3,
      "attributes": {
        "velocity": {
          "type": "integer",
          "length": 2,
          "nullable": true,
          "value": [
            120,
            null,
            140
          ]
        },
        "accuracy": {
          "type": "float",
          "length": 4,
          "nullable": false,
          "value": [
            120,
            130,
            140
          ]
        },
        "bearing": {
          "type": "float",
          "length": 8,
          "nullable": false,
          "value": [
            120,
            130,
            140
          ]
        },
        "vesname": {
          "type": "string",
          "length": 20,
          "nullable": true,
          "value": [
            "dsff",
            "fgsd",
            null
          ]
        },
        "active": {
          "type": "timestamp",
          "nullable": false,
          "value": [
            "Fri Jan 01 14:30:00 2010",
            "Fri Jan 01 15:00:00 2010",
            "Fri Jan 01 15:30:00 2010"
          ]
        }
      },
      "events": [
        {
          "1": "Fri Jan 01 14:30:00 2010"
        },
        {
          "2": "Fri Jan 01 15:00:00 2010"
        },
        {
          "3": "Fri Jan 01 15:30:00 2010"
        }
      ]
    }

    leafcount: Jumlah titik trajektori dalam objek trajektori. Nilai ini harus sesuai dengan jumlah titik spasial dalam objek geometri spasial dan sama dengan jumlah nilai untuk setiap bidang atribut. Semua bidang atribut harus memiliki jumlah nilai yang sama.

    attributes: Atribut trajektori, mencakup definisi dan urutan nilai untuk semua bidang atribut. Parameter ini diperlukan jika leafcount ditentukan. Berikut adalah penjelasan mengenai definisi atribut dan persyaratan:

    • Nama atribut dapat berisi maksimal 60 karakter.

    • type: Tipe data dari bidang. Nilai valid meliputi integer, float, string, timestamp, dan bool.

    • length: Panjang nilai bidang. Berikut adalah nilai valid untuk parameter length berdasarkan tipe data:

      • Jika type disetel ke integer, nilai valid untuk length adalah 1, 2, 4, dan 8.

      • Jika type disetel ke float, nilai valid untuk length adalah 4 dan 8.

      • Jika type disetel ke string, Anda dapat menentukan length sesuai kebutuhan bisnis. Nilai defaultnya adalah 64, dengan nilai maksimum 253. Panjang string adalah jumlah sebenarnya dari karakter string, tidak termasuk pengidentifikasi akhir.

      • Jika type disetel ke timestamp, nilai default 8 digunakan untuk length. Anda tidak dapat menentukan nilai lain untuk length.

      • Jika type disetel ke bool, nilai default 1 digunakan untuk length. Anda tidak dapat menentukan nilai lain untuk length.

    • nullable: Menentukan apakah bidang dapat bernilai null. Nilai valid adalah true dan false. Nilai defaultnya adalah true.

    • value: Urutan nilai bidang. Nilai value adalah array JSON. Anda dapat menggunakan null untuk merepresentasikan elemen null dalam array JSON.

    events: Peristiwa trajektori. Nilai events adalah array JSON. Setiap elemen dalam array JSON adalah pasangan kunci-nilai. key menunjukkan tipe peristiwa, sedangkan value menunjukkan waktu peristiwa.

  2. Jika parameter timespan atau parameter start dan end ditentukan sebagai waktu, fungsi ST_makeTrajectory akan menginterpolasi titik waktu berdasarkan jumlah titik spasial untuk menghasilkan garis waktu trajektori.

  3. Anda dapat menggunakan fungsi array_agg(row(table.*)) untuk mengumpulkan baris tabel dan mengonversinya menjadi trajektori. Untuk informasi lebih lanjut, lihat Sintaksis 5.

  4. Jika sintaksis yang tercantum dalam bagian "Sintaksis" tidak memenuhi kebutuhan Anda, Anda dapat menyesuaikan parameter yang mengikuti enam parameter tetap pertama untuk membuat fungsi makeTrajectory kustom. Sebagai contoh, Anda dapat mengeksekusi pernyataan berikut:

    CREATE OR REPLACE FUNCTION  _ST_MakeTrajectory(type leaftype, x float8[], y float8[] , srid integer, timespan timestamp[],
        attrs_name cstring[], attr1 float8[], attr2 float4[], attr3 timestamp[])
        RETURNS trajectory
        AS '$libdir/libpg-trajectory-x.y','sqltr_traj_make_all_array'
        LANGUAGE 'c' IMMUTABLE Parallel SAFE;
    Catatan

    x.y dalam contoh adalah versi Trajectory. Sebagai contoh, jika versi Trajectory adalah 4.5, nilai x.y adalah libpg-trajectory-4.5. Anda dapat memanggil fungsi ST_Version untuk menanyakan versi Trajectory.

Contoh

-- (1) ST_MakeTrajectory dengan rentang timestamp
select ST_MakeTrajectory('STPOINT'::leaftype, st_geomfromtext('LINESTRING (114 35, 115 36, 116 37)', 4326), '[2010-01-01 14:30, 2010-01-01 15:30)'::tsrange, '{"leafcount":3,"attributes":{"velocity": {"type": "integer", "length": 2,"nullable" : true,"value": [120, 130, 140]}, "accuracy": {"type": "float", "length": 4, "nullable" : false,"value": [120, 130, 140]}, "bearing": {"type": "float", "length": 8, "nullable" : false,"value": [120, 130, 140]}, "vesname": {"type": "string", "length": 20, "nullable" : true,"value": ["adsf", "sdf", "sdfff"]}, "active": {"type": "timestamp", "nullable" : false,"value": ["Fri Jan 01 14:30:00 2010", "Fri Jan 01 15:00:00 2010", "Fri Jan 01 15:30:00 2010"]}}, "events": [{"1" : "Fri Jan 01 14:30:00 2010"}, {"2" : "Fri Jan 01 15:00:00 2010"}, {"3" : "Fri Jan 01 15:30:00 2010"}]}');                        st_maketrajectory         
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 
 {"trajectory":{"version":1,"type":"STPOINT","leafcount":3,"start_time":"2010-01-01 14:30:00","end_time":"2010-01-01 15:30:00","spatial":"SRID=4326;LINESTRING(114 35,115 36,116 37)","timeline":["2010-01-01 14:30:00","2010-01-01 15:00:00","2010-01-01 15:30:00"],"attributes":{"leafcount":3,"velocity":{"type":"integer","length":2,"nullable":true,"value":[120,130,140]},"accuracy":{"type":"float","length":4,"nullable":false,"value":[120.0,130.0,140.0]},"bearing":{"type":"float","length":8,"nullable":false,"value":[120.0,130.0,140.0]},"vesname":{"type":"string","length":20,"nullable":true,"value":["adsf","sdf","sdfff"]},"active":{"type":"timestamp","length":8,"nullable":false,"value":["2010-01-01 14:30:00","2010-01-01 15:00:00","2010-01-01 15:30:00"]}},"events":[{"1":"2010-01-01 14:30:00"},{"2":"2010-01-01 15:00:00"},{"3":"2010-01-01 15:30:00"}]}}
(1 row)

-- (2) ST_MakeTrajectory dengan timestamp awal dan timestamp akhir
select ST_MakeTrajectory('STPOINT'::leaftype, st_geomfromtext('LINESTRING (114 35, 115 36, 116 37)', 4326), '2010-01-01 14:30'::timestamp, '2010-01-01 15:30'::timestamp, '{"leafcount":3,"attributes":{"velocity": {"type": "integer", "length": 2,"nullable" : true,"value": [120, 130, 140]}, "accuracy": {"type": "float", "length": 4, "nullable" : false,"value": [120, 130, 140]}, "bearing": {"type": "float", "length": 8, "nullable" : false,"value": [120, 130, 140]}, "vesname": {"type": "string", "length": 20, "nullable" : true,"value": ["adsf", "sdf", "sdfff"]}, "active": {"type": "timestamp", "nullable" : false,"value": ["Fri Jan 01 14:30:00 2010", "Fri Jan 01 15:00:00 2010", "Fri Jan 01 15:30:00 2010"]}}, "events": [{"1" : "Fri Jan 01 14:30:00 2010"}, {"2" : "Fri Jan 01 15:00:00 2010"}, {"3" : "Fri Jan 01 15:30:00 2010"}]}');                        st_maketrajectory         
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 
 {"trajectory":{"version":1,"type":"STPOINT","leafcount":3,"start_time":"2010-01-01 14:30:00","end_time":"2010-01-01 15:30:00","spatial":"SRID=4326;LINESTRING(114 35,115 36,116 37)","timeline":["2010-01-01 14:30:00","2010-01-01 15:00:00","2010-01-01 15:30:00"],"attributes":{"leafcount":3,"velocity":{"type":"integer","length":2,"nullable":true,"value":[120,130,140]},"accuracy":{"type":"float","length":4,"nullable":false,"value":[120.0,130.0,140.0]},"bearing":{"type":"float","length":8,"nullable":false,"value":[120.0,130.0,140.0]},"vesname":{"type":"string","length":20,"nullable":true,"value":["adsf","sdf","sdfff"]},"active":{"type":"timestamp","length":8,"nullable":false,"value":["2010-01-01 14:30:00","2010-01-01 15:00:00","2010-01-01 15:30:00"]}},"events":[{"1":"2010-01-01 14:30:00"},{"2":"2010-01-01 15:00:00"},{"3":"2010-01-01 15:30:00"}]}}
(1 row)

-- (3) ST_MakeTrajectory dengan array timestamp
select ST_MakeTrajectory('STPOINT'::leaftype, st_geomfromtext('LINESTRING (114 35, 115 36, 116 37)', 4326), ARRAY['2010-01-01 14:30'::timestamp, '2010-01-01 15:00'::timestamp, '2010-01-01 15:30'::timestamp], '{"leafcount":3,"attributes":{"velocity": {"type": "integer", "length": 2,"nullable" : true,"value": [120, 130, 140]}, "accuracy": {"type": "float", "length": 4, "nullable" : false,"value": [120, 130, 140]}, "bearing": {"type": "float", "length": 8, "nullable" : false,"value": [120, 130, 140]}, "vesname": {"type": "string", "length": 20, "nullable" : true,"value": ["adsf", "sdf", "sdfff"]}, "active": {"type": "timestamp", "nullable" : false,"value": ["Fri Jan 01 14:30:00 2010", "Fri Jan 01 15:00:00 2010", "Fri Jan 01 15:30:00 2010"]}}, "events": [{"1" : "Fri Jan 01 14:30:00 2010"}, {"2" : "Fri Jan 01 15:00:00 2010"}, {"3" : "Fri Jan 01 15:30:00 2010"}]}');                        st_maketrajectory         
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 
 {"trajectory":{"version":1,"type":"STPOINT","leafcount":3,"start_time":"2010-01-01 14:30:00","end_time":"2010-01-01 15:30:00","spatial":"SRID=4326;LINESTRING(114 35,115 36,116 37)","timeline":["2010-01-01 14:30:00","2010-01-01 15:00:00","2010-01-01 15:30:00"],"attributes":{"leafcount":3,"velocity":{"type":"integer","length":2,"nullable":true,"value":[120,130,140]},"accuracy":{"type":"float","length":4,"nullable":false,"value":[120.0,130.0,140.0]},"bearing":{"type":"float","length":8,"nullable":false,"value":[120.0,130.0,140.0]},"vesname":{"type":"string","length":20,"nullable":true,"value":["adsf","sdf","sdfff"]},"active":{"type":"timestamp","length":8,"nullable":false,"value":["2010-01-01 14:30:00","2010-01-01 15:00:00","2010-01-01 15:30:00"]}},"events":[{"1":"2010-01-01 14:30:00"},{"2":"2010-01-01 15:00:00"},{"3":"2010-01-01 15:30:00"}]}}
(1 row)  

-- (4) json adalah null
select ST_MakeTrajectory('STPOINT'::leaftype, st_geomfromtext('LINESTRING (114 35, 115 36, 116 37)', 4326), '[2010-01-01 14:30, 2010-01-01 15:30)'::tsrange, null); 
                        st_maketrajectory                                                                                                                  
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ 
{"trajectory":{"leafsize":3,"starttime":"Fri Jan 01 14:30:00 2010","endtime":"Fri Jan 01 15:30:00 2010","spatial":"LINESTRING(114 35,115 36,116 37)","timeline":["Fri Jan 01 14:30:00 2010","Fri Jan 01 15:00:00 2010","Fri Jan 01 15:30:00 2010"]}}
(1 row)

-- (5) ST_MakeTrajectory dibuat dari titik-titik
select st_makeTrajectory('STPOINT'::leaftype, ARRAY[1::float8], ARRAY[2::float8], 4326, ARRAY['2010-01-01 11:30'::timestamp], ARRAY['velocity'], ARRAY[1::int4], NULL, NULL, NULL::anyarray);
                                                            st_maketrajectory                             

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
{"trajectory":{"version":1,"type":"STPOINT","leafcount":1,"start_time":"2010-01-01 11:30:00","end_time":"2010-01-01 11:30:00","spatial":"SRID=4326;POINT(1 2)","timeline":["2010-01-01 11:30:00"],"attributes":{"leafcount":1,"velocity":{"type":"integer","length":4,"nullable":true,"value":[1]}}}}
(1 row)

-- (6) ST_MakeTrajectory dari tabel
create table tjrows(t timestamp, x double precision, y double precision, id int, attr text);
CREATE TABLE

insert into tjrows values ('2000-01-01 10:00:00', 3, 5, 1, 'the first point'), ('2000-01-01 11:00:00', 4, 6,2, 'the second point'), ('2000-01-01 11:05:00', 5,7,3,'the third point');
INSERT 0 3

select ST_MakeTrajectory(array_agg(row(tjrows.*)), false, '{"id","attr"}'::cstring[]) from tjrows;

                       st_maketrajectory

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
----------------------------------------------------------------
 {"trajectory":{"version":1,"type":"STPOINT","leafcount":3,"start_time":"2000-01-01 10:00:00","end_time":"2000-01-01 11:05:00","spatial":"LINESTRING(3 5,4 6,5 7)","timeline":["2000-01-01 10:00:00",
"2000-01-01 11:00:00","2000-01-01 11:05:00"],"attributes":{"leafcount":3,"id":{"type":"integer","length":4,"nullable":true,"value":[1,2,3]},"attr":{"type":"string","length":64,"nullable":true,"valu
e":["the first point","the second point","the third point"]}}}}
(1 row)