2012-03-19 5 views
3

AndroidでGPSから正確な速度を取得するにはどうすればよいですか? はい、私はLocationクラスのlocation.getSpeed()メソッドを認識しています。問題は、既定の実装は速度として0.0を返します:明らかにthat is the default behaviorAndroidでGPSから最も正確な速度を得る方法

私は現在やっている何を、次のように、位置を考慮していることはB後に最初に取られ、bは、オブジェクト:

a.distanceTo(b)/(b.getTime()-a.getTime()); 

(読みやすくするために簡略化され、歴史ArrayListと元のコードディール)

これは多少不正確です。通常の状況では、データポイントは互いに非常に近く、GPSの不正確さが実際に問題になります。どちらかといえば、更新頻度を減らすか、もっと遠く離れた場所を基準にして速度を計算する必要があります。私は可能な限り高い周波数を得たいと思っていますが、前者はやりたくありませんが、おそらく距離をフィルターにしてその距離に基づいて速度を計算することができますか? 私がgetSpeed()メソッドを実行すると仮定した最適解は、GPS衛星自体の速度を計算することになり、より正確な結果が得られます。 getSpeed()何となく間違って使っていますか?

+0

こんにちは、私は緯度を取得すると正確なパラメータを含めるべきだと思っています。Locationクラスからログします。 "getAccuracy()"それはint - meterの精度を返します。これを計算に含める必要があります –

+0

エミュレータは明らかに常に速度として0に答えますが、実際のデバイスは速度ではありません。実際のデバイスで同じ問題がありますか? – Stefan

答えて

0

エミュレータは明らかに常に0と速度で応答しますが、実際のデバイス はそうではありません。実際のデバイスで同じ問題がありますか? - Stefan Mar 20 at 8:21

ステファンの答えは実際には正しいです。テストデータとしてGPXファイルには入っていないので、エミュレータは速度を出さないことは明らかです。したがって、スピードを見せて、実際のデバイスでテストし、ジョグを実行したい場合は、ほとんどのデバイスで動作します。

以下は速度を検出する他の方法の考え方ですが、厳密には関係ありませんが、GPSで作業している場合は面白いかもしれません。

GPSの相対的な精度が悪いため、特に低速または曲がりくねった道路では、速度を計算するのが難しい:データポイント間の距離が非常に短いGPS不正確さが再生されるか、移動しないと不正確になるまっすぐ。また、速度を計算するためのデータ点間の最小距離が長い場合、遅い速度では更新間隔が問題になります。 getAccuracy()メソッドを使用してデータポイント間の最小安全距離を計算し、動的に使用するなど、この問題を回避する方法があります。最大加速および減速値、移動方向などに基づいてデータポイントをフィルタリングします。また、ローリング平均を計算して、変更を少しでも落ち着かせ、何が良いのかを知ることができます。

上記の方法は、あなたが移動しているときでさえ、GPSが速度を0として返すように見えるため、対象となる距離に基づいて速度を計算しない場合でも有効です。 F1車の加速/減速度をフィルターとして使用しました:)

0

あなたが歴史をなぜ保つので...

現在位置と時刻を取得

現在と最後の間の速度を探す〜10

はあなたの結果の平均を取る

0

あなたが述べた数式を使って平均速度を決定しますが、2点が一直線になるようにします。 Location.getBearing()を呼び出して、ユーザーが同じ方向にまだ移動しているかどうかを確認できます。それが十分に近い場合、あなたは彼らが直線で旅行したと仮定することができます。単に結果を破棄しない場合。

この速度は、停止標識や停止電灯などの停止によって影響されることに注意してください。可能な限り頻繁にサンプリングし、明らかな異常値を破棄します。

関連する問題