2017-05-15 80 views
0

當使用RunKeeper或Nike +運行時,當前速度跳躍很多(以4.30/km顯示4-5分鐘/公里內顯示的任何內容,而總距離和平均速度是相當不錯的。使用iPhone GPS運行時獲得最準確的「當前速度」

我開始開發自己的運行應用程序,並發現他們可能正在使用中的數據直接從CLLocationManager。這裏是我的斯威夫特3代碼,得到了類似的結果耐克+當前的步伐。

func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) { 

    for location in locations { 

     print("GOT LOCATION \(location)") 

     if location.horizontalAccuracy < 20 { 

      if self.locations.count > 0 { 

       distance += location.distance(from: self.locations.last!) 
      } 
      self.locations.append(location) 
     } 
    } 
} 

什麼是最好的方法來獲得更好的當前節奏?目前的節奏可以延長到「最後30秒」幫助。同時使用耐克同時+當運行在我的手機5秒/公里(或儘可能小)

回答

0

的最新進展

我使用以下設置和測試的代碼 - 的誤差應該是最大+ ,以及Styrd腳架(據說這是超級準確的)的Garmin Fenix 3手錶。

_locationManager.desiredAccuracy = kCLLocationAccuracyBest 
_locationManager.activityType = .fitness 
_locationManager.distanceFilter = kCLDistanceFilterNone 

然後在的LocationManager:

if location.horizontalAccuracy < 40 { 
    distance += location.distance(from: savedLocations.last!) 
} 

使用此代碼我得到比耐克+和Garmin 20%以上的距離。在整個運行過程中

My code 12.3 km 
Nike + 10.01 km (running simultaneously on the phone, getting the same GPS updates) 
Garmin 9.75 km 

這些比率保持,所以當耐克+登錄5km的我的代碼記錄6公里。由於GPS位置通常具有較低(實際)水平準確度,因此應該需要一些額外的操作來獲得真正準確的距離。我想看看如果我簡單地調整比例以符合Nike +,即10/12,3 = 0.81的比例會發生什麼。

所以我改變了代碼

distance += location.distance(from: savedLocations.last!) * 0.81 

昨天跑了相同的10公里。這次我得到了結果:

My code 9.04 km (or 11.16 if I wouldn't have used * 0.81) 
Nike+ 10.00 km 
Garmin 9.66 km 

所以,這一次的比例實際上是0.9比0.81。所以Nike +一定有其他的東西。

最令人沮喪的事實是,我的代碼第一次記錄了12.3公里,第二次記錄了11.16公里。

想法:

增加(更低的值)所需的精度。

if location.horizontalAccuracy < 40 { 

但是我需要40爲它在城市與我的iPhone 7+ 很好地工作顯然,我寧願拿不出更新比一個40米錯誤

集distanceFilter到例如10

_locationManager.distanceFilter = 10.0 

這兩個想法都會影響將生成的位置更新數。這反過來會使跑者似乎走得更「直線」,更少的抖動。這將使距離更短,這是我們想要的。但是對於平均運行軌跡來說它是否具有很好的平衡精度?小轉不會被拿起。 * 0.81方法會更準確嗎?

,我可能會嘗試今天與

_locationManager.distanceFilter = 10.0 
if location.horizontalAccuracy <= 20 

,看看把我帶。

相關問題