時空數據庫管理移動對象,比如:汽車、飛機、地貌變化等。空間數據庫是時空數據庫的特例,即時刻固定。
軌跡壓縮
每秒鍾都會從 GPS 獲取大量 $(x,y,t)$ 格式的數據,如何在不降低物體軌跡精度的前提下減小數據量呢?主要有三個指標:處理時間、壓縮率、誤差測量。
誤差:原始軌跡位置與估計軌跡位置之間的距離。主要有兩種誤差測量指標:垂直歐式距離、時間同步歐式距離。
垂直歐式距離:如下左圖所示,$p_1,p_7,p_{12}$ 是壓縮后的點,垂直度量則為原始軌跡點到壓縮后軌跡之間的投影距離。
時間同步歐式距離:如下右圖所示,$p_1,p_7,p_{12}$ 作為壓縮后的點,假定物體移動的速度恆定,那么 $p_1,p_2$ 之間的時間和 $p_1,p_2^{'}$ 之間的時間相同。
軌跡壓縮分為在線壓縮和離線壓縮兩類。
離線壓縮:收集完整的軌跡數據后,先壓縮再傳輸至服務器。常用的算法:道格拉斯-普客(DP)算法。
在線壓縮:根據要求的精度選擇性的在線更新。常用的算法:滑動窗口, 開放窗口。
1. 離線壓縮 - DP算法
在估計軌跡中根據垂直歐式距離保留方向趨勢,將原始軌跡替換為近似直線段。如果替換不滿足指定的誤差要求,則通過選擇誤差最大的位置點作
為分割點,遞歸地將原問題划分為兩個子問題,直到近似軌跡與原始軌跡之間的誤差低於指定的誤差閾值。
舉個例子:下面左圖中,估計軌跡是 $p_0$ 和 $p_{16}$,$p_9$ 引入了最大誤差,於是切分為 $p_0,p_9$ 和 $p_9,p_{16}$,如下右圖。
$p_0,p_9$ 中 $p_3$ 又引入了最大誤差,因此再將 $p_3$ 作為分割點切開。
2. 在線壓縮 - 滑動窗口
用一條有效的線段擬合一個增長的滑動窗口中的位置點,並繼續增長滑動窗口,直到近似誤差超過某個誤差界。
首先將軌跡的第一個點初始化為錨點 $p_0$,然后開始增大滑動窗口,當一個新的點 $p_i$ 加入到滑動窗口中時,用線段 $p_0p_i$ 來擬合滑
動窗口內所有的原始軌跡點。只要窗口內的軌跡相對於線段 $p_ap_i$ 的距離誤差小於用戶指定的誤差閾值,滑動窗口就會繼續增大。否則,將
線段 $pap_{i-1}$ 作為近似軌跡的一部分,並將 $p_{i-1} 設置為新的錨點。該算法將一直持續到訪問完原始軌跡中的所有位置點。
舉個例子:當滑動窗口從 $p_0$ 增長到 $p_0,p_1,p_2,p_3$ 時,擬合線段與原始軌跡之間的誤差均不大於指定的誤差閾值。當包含 $p_4$ 時,
$p_2$ 的誤差超過閾值,因此 $p_0p_3$ 被包含在近似軌跡中,然后 $p_3$ 被設置為新的錨點。下圖綠線即為最終生成的軌跡。
3. 在線壓縮-開放窗口
與滑動窗口不同,開放窗口選擇滑動窗口中誤差最大的點作為逼近線段的閉合點和新的錨點。當包含 $p_4$ 時,$p_2$ 的誤差超過閾值,因此 $p_0p_2$
被包含在近似軌跡中,$p_2$ 被設置為新錨點。
軌跡地圖匹配
地圖匹配(Map Matching)是指將行車軌跡的經緯度采樣序列與數字地圖路網匹配的過程,其本質上是平面線段序列的模式匹配問題。
在實際應用中,GPS 采樣信號的質量會嚴重影響地圖匹配結果:采樣頻率的降低、定位誤差的加大、信號的丟失,都會使匹配的不准確性增加。
這些情況在實際應用中經常出現。如何在這些情況下仍能保持較高的路徑匹配准確率是個值得研究的問題。
局部/增量算法:是貪婪算法,每次確定一個匹配點,下個點從已經確定的匹配點開始。這些方法根據距離和方向相似性來找到局部最優點或邊。(在線匹配)
全局算法:是要從路網中找到一條與采樣軌跡最接近的匹配軌跡。為了測量采樣軌跡和匹配軌跡的相似性,大多數算法使用“Frechet距離”。(離線匹配)
Frechet Distance 用於衡量兩個曲線的相似度,后又被描述為遛狗最短狗繩問題,即:主人走路徑 $A$,狗走路徑 $B$,各自走完這兩條路徑過程中所需要的最短狗繩長度。
舉個例子:下圖中黑色折線是人的軌跡,藍色折線是狗的軌跡,剛開始人和狗都位於位置 $0$,現在讓它們往前走,速度可以不同,這里假設人狗速度相同,
也就是說人和狗的距離不會超過 $1$ 個坐標,兩者或交替前進或同時前進。我們的目的是用最短的狗繩走完這兩條軌跡,橙色表示狗繩。
現在人狗都位於位置 $0$,至少需要的狗繩長度如橙線所示,接下來有三種前進方式:狗先走一步、人先走一步、人狗同時走。觀察這三種前進方式狗繩
長度的變化,我們要找出使狗繩長度最短的前進方式。顯然狗先走一步,狗繩最短,如下右圖,此時人在位置 $0$,狗在位置 $1$。
用坐標 $(0,1)$ 表示當前人狗位置,下一步人先走,坐標變為 $(1,1)$,如下左圖。下一步,人狗同時走,坐標變為 $(2,2)$,如下右圖:
接下來,人先走一步,坐標變為 $(3,2)$,如下左圖。因為速度限制,所以接下來只能狗前進,坐標變為 $(3,3)$,如下右圖。
接下來,人狗同時前進,坐標變為 $(4,4)$,如下左圖。然后人前進一步,坐標變為 $(5,4)$,如下右圖。
接下來,狗前進一步,坐標變為 $(5,5)$,如下左圖。然后人狗同時前進一步,坐標變為 $(6,6)$,如下右圖。
所以最終算法的結果就是下圖中紅色區域內的狗繩長度,就是最短所需狗繩長度。
遞推公式為:
$$dp[i][j] = \max\left \{ \min\left \{ dp[i-1][j], dp[i-1][j-1], dp[i][j-1] \right \},\; E(i,j) \right \}$$
$E(i,j)$ 表示兩點之間的歐式距離。這個遞推公式是兩個對象速度相同的情形(交替前進),人和狗可以從上面三種情況到達 $i,j$ 點。所以我
們需要找到這三個位置最小的那一個距離與 $i,j$ 點的距離進行比較。