使用CoreLocation來跟蹤用戶距離

使用CoreLocation來跟蹤用戶距離

背景

CoreLocation是一個強大的Framework,他能幫助開發使其免於複雜的位置處理而專注於應用邏輯的開發。然而CoreLocation並沒有提供的對用戶移動距離的檢測,當我們開發跑步類運動類應用時,就不可避免的需要這項功能。湊巧有一個朋友讓我幫忙做一個GPS模塊,故而就有了CYLocationManager。

代碼在Github開源託管,傳送門

實現說明

Readme有詳細的使用說明,我在這裏主要描述一下實現的一些要點。

基本的思路既是不斷的採樣用戶數據,過濾掉誤差較大的數據,取相對誤差較小的數據進行記錄,然後計算相鄰記錄點之間的距離。

簡單描述一下幾個要點:

  1. 當用戶開始運動,程序開始追蹤,設置一個強制標記,(needForceCalculation),表示程序應該忽略其他因素,立刻獲取一個點座標。用做起始值。
  2. 設置了CLLocationManager.headingFilter,使得程序能在用戶轉向的時候收到通知,此時設置一個強制標記(needForceCalculation),使得程序在用戶轉向的時候,記錄下轉向時所在的位置,以減少誤差。
  3. 設置CLLocationManager.distanceFilter,使得程序在變化的位置大於一定數值時該更新位置纔算爲有效,可以避免用戶在一個地方停留,由於誤差記錄距離依然增長。
  4. 當程序獲得位置更新時,若精度合格,切時間戳合理,則加入一個數組,用於之後的計算。若精度大於某個閥值,則認爲該位置對跟蹤距離無幫助,此時將該位置捨去。
  5. 數組currentKeepLocations來記錄最近更新的k個位置,並每隔t秒,從該數組中,取出精度最高的位置記錄。(精度見CLLocation.horizontalAccuracy)
  6. 注意,當用戶停止運動時,位置將無法得到更新,此時需要設置一個timer,令其在一定時間內強制獲得一個位置。
  7. 該程序還可以通過每次更新位置時獲得的位置的精確度來判斷GPS信號的強弱。





原文地址:傳送門

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章