我有一些我記錄的座標數據。不幸的是,它們似乎並不真實。他們有時會跳過地圖。所以現在我正在尋找一些使路線看起來更真實的展平或過濾算法。平滑GPS跟蹤路線座標
目前我唯一的過濾器是計算一秒鐘內(在公交車或汽車或步行中)行駛的最大可能的米數,並將它們與座標進行比較,將它們扔掉,這在一段時間內是不可能的。所以如果一個人一秒鐘可以走到2.5米,而且我有兩個彼此相距10米的座標,並且在兩秒鐘內記錄下來,我試圖找到它們並將它們扔掉。這有一點幫助。
這是代碼:
filters.max_possible_travel = function(data) {
//http://en.wikipedia.org/wiki/Preferred_walking_speed
//I switched to 16, as the route was made by driving with a bus...
var maxMetersPerSec = 16,
i, m, last, result = [];
for(i=0;i<data.length;i++) {
m = data[i];
if (last) {
// seconds between current and last coord
var diff = (m.created.getTime() - last.created.getTime())/1000;
// the maximum amount of meters a person,bus,car etc can make per sec.
var maxDistance = diff * maxMetersPerSec;
// the actual distance traveled
var traveledDistance = google.maps.geometry.spherical.computeDistanceBetween(last.googLatLng, m.googLatLng);
if (traveledDistance > maxDistance) {
continue;
} else {
result.push(m);
}
}
last = m;
}
return result;
};
爲了讓你的東西更容易,我創造了這個撥弄它已經實現了我的第一個過濾器,也使您能夠添加新的篩選器的能力。
一些futher的想法,我有:
- 罰球全部COORDS遠是在一個特定的半徑。這最終會刪除一些令人不安的座標,如果你只是站在幾分鐘內
- 將所有座標按n秒幀分組,並嘗試確定在該程序段中最相關的座標。可惜的是我沒有任何想法:(
如何所以我覺得這是一個真的interessting的問題,我希望你明白我說的一切。我感謝你們的幫助!
編輯 :我發現一些關於線性最小二乘和卡爾曼濾波I'm進去,但因爲I'm絕對不是數學專家,我希望在這個任何幫助
EDIT 2個 進展:)我。實現了@geocodezip p。的DouglasPeucker算法romoted給我。算法本身並不能解決所有問題,但我目前的「max_possible_travel」組合看起來幾乎完美。如果我用第二個參數稍微玩一下,它會得到互動。請看看新的小提琴,並確保您檢查過濾器「walkfilter」和「gdouglaspeucker」。 http://jsfiddle.net/z4hB7/8/
聽起來前途,也會給它一個嘗試 – Luke 2013-04-20 19:06:21
這看起來像機器語言代碼... – Aggressor 2015-11-30 19:53:33