2012-02-03 8 views
0

私はCohenのWindows phone GPSエミュレータを使用して自分で速度を計算しようとしています。WP7のGPS速度を計算すると奇妙な結果になる

void watcher_PositionChanged(object sender, GeoPositionChangedEventArgs<GeoCoordinate> e) 
    { 
    DateTime curTime  = DateTime.Now; 
    double curDistance  = e.Position.Location.GetDistanceTo(lastKnownPosition); 
    TimeSpan curTimeOffset = curTime - lastRecvTime; 
    double curSpeed  = curDistance/curTimeOffset.TotalSeconds; 

LastKnownPositionが最後のGeoCoordinateを表す場合、lastRecvTimeについても同様です。 curSpeedに関する不安定な結果が表示されます。速度は時々10m/sであり、場合によっては20m/sに飛ぶ。

私はここで間違っていますか?

+0

典型的なWindowsの時刻推定のような音:http://xkcd.com/612/ – nybbler

+0

あなたはまっすぐに「歩いていますか? –

+0

GPSエミュレータは直線のみを行うように設定されているので、はい –

答えて

0

GPSの精度は限られています。通常は(ハードウェア、衛星の視線、GPSの利用可能な衛星の数による)2つの修正の間に、1秒間に20回の修正を行い、移動距離が10m/sであれば、 GPSの精度よりも低い。

修正プログラムを数秒おきに使用するか、キュー(効率的にキューを実装するために循環アレイを使用できます)を維持して平均速度を使用してください。私は両方の組み合わせを提案します。

+0

あなたが基本的に言っているのは、私が蓄積しなければならないことです。次に平均速度を求めよう: 総走行距離/ 3秒? –

+0

基本的にはyesですが、Locationインスタンスからの時間差を使用します。 – Stefan

+0

Stefan:どのようにしてe.Position.Timestampをutcに変換できますか?それは時間の正しい変数ですか? –