2011-07-18 10 views
1

私は、Androidプラットフォームのアプリで一定期間にわたって経過した距離を計算しようとしています。
これを行うにはどうすればよいですか?
現在、私はLocationListenerインターフェイスを実装しています。
私はメソッドをオーバーライドしていますが、私は現在、このような何かやっているある期間に渡って移動距離を計算する最良の方法は何ですか?

をonLocationChanged:だから私は「新しい場所ポイントに古い地点から今までの時間を距離を追加してい

public void onLocationChanged(Location location) { 
     Log.d("onLocationChanged", "onLocationChanged"); 


     old_location.set(new_location); 
     new_location.set(location); 
     totalDistanceElapsed += new_location.distanceTo(old_location); 

}
をonLocationChanged "と呼ばれています。 これが正しいですか? 他に何かする必要がありますか? これは正確でしょうか?そうでない場合は、どうすればより正確にすることができますか?ありがとう

+0

それはどれくらいの安心感があるのですか?私にとって、最良の方法は、g回の位置をx回(例えば30秒)記録して距離を計算することです。状況に応じて変化する可能性があります...別の方法は、速度に基づいてサンプル時間を計算することです。つまり、スピードが速ければサンプルレートが向上します。 – ykatchou

+0

良い質問。 1つのプロパティtotalDistanceElapsedには、移動しないときに増加しないプロパティが必要です。正確な場所がわからないので、電話が動いていないところでtotalDistanceElapsedが増加しないことを確認するテストをお勧めします。実際に増加している場合は、許容範囲を下回る場合にイベントを破棄する10mの許容値を追加することができます。 –

+0

ありがとうございました "どこに電話が動いていないかテストする"方法がわかりません もう一度お寄せください。ありがとうございました – dewijones92

答えて

3

時間の経過に伴う移動距離を決定する簡単な方法は、毎秒修正を取得し、各修正について報告された速度(毎秒メートル数)を読み取り、記録することです。その後、移動距離は、経過した時間の全速度の合計です。

動きとして「ジッタ」をカウントしないようにしたい場合(GPS修正が不正確で修正がゆっくりとさまよっているが、実際にはデバイスが静止している場合など)、速度しきい値を設定できます。特定のレベル以下の速度を無視することによって、または見出しが修正の間に急速に変化している場合これらの閾値は、おそらく使用されるGPSデバイスに依存し、この種のものはすでに組み込まれています(速度が低すぎると0m/sを報告する)。

実際にはデバイスに依存しますが、例として、私の初期のモデルであるSamsung Galaxy I9000は、毎秒約0.5メートルの晴れた空の条件でも20メートルの半径の領域を徘徊しているので、10分間フィールドに静止していれば、 300m。

関連する問題