Membuat objek trajectory dari geometri spasial, timestamp, dan data atribut opsional.
Sintaks
Sintaks 1 — Rentang waktu:
trajectory ST_makeTrajectory(leaftype type, geometry spatial, tsrange timespan, cstring attrs_json);Sintaks 2 — Timestamp awal dan akhir:
trajectory ST_makeTrajectory(leaftype type, geometry spatial, timestamp start, timestamp end, cstring attrs_json);Sintaks 3 — Array timestamp:
trajectory ST_makeTrajectory(leaftype type, geometry spatial, timestamp[] timeline, cstring attrs_json);Sintaks 4 — Array koordinat:
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, anyarray attr_any);Sintaks 5 — Dari baris tabel:
trajectory ST_makeTrajectory(anyarray rows, bool hasz, cstring[] attrnames);Parameter
| Parameter | Deskripsi |
|---|---|
type | Tipe leaf dari trajectory. Hanya ST_POINT yang didukung. |
spatial | Objek geometri spasial, berupa LineString atau Point. |
timespan | Rentang waktu trajectory. Ini adalah interval tertutup yang mencakup waktu mulai dan waktu akhir. |
start | Waktu mulai trajectory. |
end | Waktu akhir trajectory. |
timeline | Timeline trajectory. Jumlah titik waktu harus sama dengan jumlah titik dalam LineString. |
attrs_json | Atribut dan event trajectory dalam format JSON. Menerima null. |
x | Array koordinat sumbu-x untuk objek geometri spasial. |
y | Array koordinat sumbu-y untuk objek geometri spasial. |
srid | Spatial Reference Identifier (SRID) dari trajectory. Wajib diisi. |
attr_field_names | Nama semua bidang atribut dalam trajectory. |
rows | Tabel yang digunakan untuk menyimpan data trajectory. Kolom pertama harus berupa timestamp, sedangkan kolom kedua dan ketiga harus berupa float8. |
hasz | Menentukan apakah trajectory bersifat tiga dimensi. Nilai valid: true (trajectory 3D — kolom keempat harus berupa float8) dan false (trajectory 2D — kolom keempat merepresentasikan atribut trajectory). |
attrnames | Nama atribut trajectory. Nilai default: attr1, attr2, .... |
Format attrs_json
Parameter attrs_json menerima objek JSON dengan struktur berikut:
{
"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 trajectory. Harus sesuai dengan jumlah titik dalam objek geometri spasial. Semua bidang atribut harus memiliki jumlah nilai yang sama.
attributes: Atribut trajectory, termasuk definisi bidang dan urutan nilai. Wajib diisi jika leafcount ditentukan.
Nama atribut dapat memiliki panjang maksimal 60 karakter.
type: Tipe data bidang. Nilai valid:integer,float,string,timestamp, danbool.length: Panjang nilai bidang. Nilai valid bergantung padatype:integer: 1, 2, 4, atau 8float: 4 atau 8string: nilai apa pun sesuai kebutuhan Anda; default 64, maksimum 253. Panjang dihitung berdasarkan jumlah karakter aktual, tidak termasuk identifier akhir.timestamp: tetap 8; tidak dapat diatur.bool: tetap 1; tidak dapat diatur.
nullable: Apakah bidang menerima nilai null. Nilai valid:truedanfalse. Default:true.value: Array JSON berisi nilai bidang. Gunakannulluntuk merepresentasikan elemen null.
events: Array JSON berisi event trajectory. Setiap elemen merupakan pasangan kunci-nilai di mana kunci adalah tipe event dan nilai adalah waktu event.
Catatan penggunaan
Interpolasi waktu: Ketika
timespan(Sintaks 1) ataustart/end(Sintaks 2) ditentukan,ST_makeTrajectorymelakukan interpolasi titik waktu berdasarkan jumlah titik spasial untuk menghasilkan timeline trajectory.Membangun dari tabel: Gunakan
array_agg(row(table.*))untuk mengagregasi baris tabel menjadi trajectory (Sintaks 5).Sintaks kustom: Jika sintaks bawaan tidak memenuhi kebutuhan Anda, buat fungsi kustom dengan parameter tambahan setelah enam parameter tetap pertama:
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;Ganti
x.ydengan nomor versi Ganos. Misalnya, untuk Ganos 4.5, gunakanlibpg-trajectory-4.5. PanggilST_Version()untuk mengecek versi Ganos saat ini.
Contoh
Sintaks 1 — Membuat trajectory dari rentang waktu. Saat tsrange diberikan, fungsi melakukan interpolasi titik waktu sepanjang titik spasial.
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"}]}'
);Output:
{"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"}]}}Sintaks 2 — Membuat trajectory dari timestamp awal dan akhir eksplisit:
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"}]}'
);Sintaks 3 — Membuat trajectory dengan array timestamp eksplisit:
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"}]}'
);Sintaks 1 dengan atribut null — Lewati data atribut dengan memberikan null untuk attrs_json:
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
);Output:
{"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"]}}Sintaks 4 — Membuat trajectory dari array koordinat:
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
);Output:
{"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]}}}}Sintaks 5 — Membuat trajectory dari baris tabel menggunakan array_agg:
-- Buat tabel dan masukkan baris contoh
CREATE TABLE tjrows (t timestamp, x double precision, y double precision, id int, attr text);
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');
-- Buat trajectory. Kolom pertama adalah timestamp, kolom kedua dan ketiga adalah koordinat x/y.
SELECT ST_MakeTrajectory(array_agg(row(tjrows.*)), false, '{"id","attr"}'::cstring[])
FROM tjrows;Output:
{"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,"value":["the first point","the second point","the third point"]}}}}