依據基于SED距離的DouglasPeucker算法(二維+時間)將trajectory對象按一定規則進行簡化壓縮。
語法
trajectory ST_CompressSed(trajectorytraj,float8dist);
參數
參數名稱 | 描述 |
traj | 原始軌跡。 |
dist | 時間同步距離(SED)偏移閾值,指定后可以保留軌跡空間上的整體趨勢。 |
描述
計算軌跡點的時間同步距離(SED),用距離值與閾值比較對軌跡進行有損壓縮,返回壓縮后的軌跡對象。
RDP算法只考慮了二維的軌跡,即將所有點都放在平面上。而這在時空軌跡(可以視為一個三維的折線)上,會造成如下問題:
軌跡在一個點停留很久,在三維上,形成一條與t軸平行的長直線,而在二維上這段直線則變成一個點,依據二維的RDP算法,必會將此直線的起點和終點舍去一個,破壞三維上的結構。
因此,在有時間戳時,我們時常使用 Sychronized Euclidean Distance(SED,同步時間歐式距離)取代上述的垂直歐式距離。
同步時間距離的定義是:對于起點和終點分別是(xs,ys,ts), (xe,ye,te)
的直線和一點(xm,ym,tm)
,(其中ts<=tm<=te
),先通過插值在直線上找到tm時刻的點(xm', ym', tm)
,之后再計算(xm,ym)
到(xm', ym')
的距離。
說明
對于不需要考慮駐留時間因素,只需要考慮二維軌跡形狀的情形,可以使用ST_Compress。
示例
select st_compressSED(traj, 0.001) as traj from traj_test;
traj
-------------------------------------------------------------
{"trajectory":{"version":1,"type":"STPOINT","leafcount":12,"start_time":"2017-01-15 09:06:39","end_time":"2017-01-15 21:18:30","spatial":"LINESTRING(-179.48077 51.72814,-179.42595 51.80094,-179.39734 51.83398,-179.37474 51.86568,-179.18826 52.10105,-179.16482 52.12996,-179.14599 52.15132,-177.76666 52.85042,-177.47319 52.90084,-177.31238 52.92697,-177.03751 52.97394,-176.68481 53.03327)","timeline":["2017-01-15 09:06:39","2017-01-15 09:34:40","2017-01-15 09:47:38","2017-01-15 09:59:09","2017-01-15 11:30:09","2017-01-15 11:42:00","2017-01-15 11:50:28","2017-01-15 18:01:00","2017-01-15 18:56:22","2017-01-15 19:26:10","2017-01-15 20:15:49","2017-01-15 21:18:30"],"attributes":{"leafcount":12,"sog":{"type":"float","length":8,"nullable":false,"value":[10.5,11.0,10.6,11.2,9.1,9.7,9.9,12.3,12.0,12.2,12.8,12.7]},"cog":{"type":"float","length":8,"nullable":false,"value":[23.3,28.5,29.2,27.1,26.8,30.1,30.0,74.2,81.3,73.4,74.2,72.9]},"heading":{"type":"float","length":8,"nullable":false,"value":[22.0,27.0,24.0,29.0,27.0,26.0,27.0,69.0,72.0,71.0,72.0,73.0]}}}}
(1 row)
文檔內容是否對您有幫助?