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.
|
attrnames | Nama atribut untuk trajektori. Jika parameter ini tidak ditentukan, nilai defaultnya adalah |
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.
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.
Anda dapat menggunakan fungsi
array_agg(row(table.*))untuk mengumpulkan baris tabel dan mengonversinya menjadi trajektori. Untuk informasi lebih lanjut, lihat Sintaksis 5.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;Catatanx.ydalam contoh adalah versi Trajectory. Sebagai contoh, jika versi Trajectory adalah 4.5, nilai x.y adalahlibpg-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)