2017-05-15 1 views
0

RunKeeperまたはNike +で走っているとき、現在のペースが大きくジャンプします(4.30/kmで走っているときは4-5min/kmから、かなり良いです。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

私は次の設定を使用していますし、自分の携帯電話上で同時に両方のNike +を使用して実行するときに、コードをテストしているPROGRESS UPDATE

、Styrdフットポッド(これは非常に正確であると言われている)でガーミン・フェニックス3時計。

locationmanagerに続い
_locationManager.desiredAccuracy = kCLLocationAccuracyBest 
_locationManager.activityType = .fitness 
_locationManager.distanceFilter = kCLDistanceFilterNone 

:このコードを使用

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

iは、ナイキ+とGarminのに比べ20%以上の距離を得ます。

これらの比率は実行中に維持されていたので、Nike +が5kmを記録すると、コードが6km記録されました。

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.81を超えています。だから、Nike +がやるべきことが他にもあるはずです。

私のコードが最初に12.3km、2回目に11.16km記録されたというのが最も憂慮すべき事実です。

アイデア:

必要な精度を上げる(値を下げる)。

if location.horizontalAccuracy < 40 { 

それは私のiPhone 7+ と都市でうまく動作するようにするために、私は明らかに私はむしろたとえば10

のための40メートル間違っ

セットdistanceFilterにあるものよりも何のアップデートを取得していないだろ40を必要に応じしかし、

_locationManager.distanceFilter = 10.0 

これらの両方のアイデアは、生成されるロケーション更新の数に影響します。これにより、ランナーはジッターの少ない、より直線的に見えるようになります。これは私たちが望む距離を短くします。しかし、それは平均ランニングトレイルのバランスのとれた正確さですか?小さなターンは拾われません。 * 0.81のアプローチがより正確になりますか?

私はおそらく

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

で今日試してみて、それが私を取る場所を確認します。

関連する問題