2010-09-15 48 views
2

我跑的時候就爲iPhone相當簡單的出差申請使用工作,騎自行車等,實現里程錶如何在iPhone上

有一個問題我想實現的特徵是里程錶。

我通過didUpdateToLocation定期獲取位置。

我試過測量newLocation和oldLocation之間的距離並累計結果,但這不是很準確。累計值通常遠大於實際行駛距離。

我可以使用什麼算法來提高此計算的準確性?

+0

您是否找到了答案? – chris 2010-09-26 17:39:48

+0

我認爲使用低通濾波器的想法是合理的,但我還沒有機會嘗試它。 – Avalanchis 2010-09-27 12:38:05

回答

1

聽起來好像GPS信號會將設備的(報告)位置移動到所有位置,應用程序會將其解釋爲用戶不斷變換方向。也許這將有助於將運動從一個位置分離到另一個位置,並將它們分成x和y分量,並通過某種低通濾波器運行它們。這應該最大限度地減少「壞」更新的影響,從而將您的位置完全移出實際路徑。

1

我試圖弄清楚這一點,並認爲可以用CLLocationManagerdistanceFilter屬性做些事情。該屬性允許您將didUpdateToLocation委託調用限制爲距前一更新至少最小距離的更新。例如,在里程錶問題的情況下,假設你站立不動,但GPS在你身邊不定期報告位置。如果您將distanceFilter設置爲2,則這些更新都不會被註冊爲移動。

訣竅是找到一個值得工作的distanceFilter,我相信這與GPS的horizontalAccuracy有關(我認爲這是錯誤更新的原因)和你旅行的速度。 horizontalAccuracy應該適合戶外活動,但假設是這些小小的不準確會累積並導致不正確的里程錶讀數。

如果每次打電話給didUpdateLocation引入少量錯誤(比如說,每次讀數高達10釐米),那麼慢速活動比如行走將極其不準確,如果每個電話打到didUpdateToLocation。這將高達(10cm/1m =)每次更新錯誤的10%。如果這是在100km/h行駛的汽車中完成的,並且distanceFilter設置爲10m(這是安全的設置,因爲以100km/h行駛的汽車將在非常接近10m的直線上行駛),那麼相同的誤差每次更新只有10cm的最大值(10cm/10m =)1%的誤差。這可能比這更復雜,但我試圖說明速度起了一個作用。

我認爲解決方案是爲distanceFilter選擇一個最小化錯誤更新的值,但最重要的是考慮到用戶的速度(例如前一個例子中的汽車)。任何人都想弄清算法或公式?