GPSロギングアプリケーションの作成~
によって報告されたgetSpeed()
メソッドによって返される値が非常に信頼できないことがわかりました。最高の精度を得るために、提供された場所をフィルタリングして使用しています。1 桁の精度レベルであっても、返される速度は一般的に途方もなく高速です。電話が静止している場合、最大 200 mp/h (メートル/秒でログに記録されていることは知っています) まで話しています。Locations
LocationManager
LocationManager.GPS_PROVIDER
onLocationChanged
2 つの異なるモデルの Android スマートフォンで同じコード ベースをテストしており、2 つの異なる OS バージョンを実行していて、同じ問題が発生しているため、これはコードの問題であると考えられます。
私は何が欠けていますか?時間枠で場所を平均化しようとしましたが、役に立ちませんでした。移動距離/時間に基づいて独自の速度値を計算する必要がありますか? これはがっかりするでしょう。
ご覧のとおり、私は特別なことは何もしていません。位置の精度が良好な場合でもAverageSpeed
、この両方の後でも、精度のために少しフィルタリングしています。_bestLocation.getSpeed()
public void onLocationChanged(Location location) {
if (location.getAccuracy() < 25f) {
_recentLocations.add(location);
if (_bestLocation == null || location.getAccuracy() <= _bestLocation.getAccuracy())
_bestLocation = location;
}
if ((_bestLocation != null && _bestLocation.getAccuracy() < 10f && _recentLocations.size() >= 10)
|| _recentLocations.size() >= 25)
{
int Count = 0;
float TotalSpeed = 0f;
float AverageSpeed = 0f;
for (int i = 0; i<_recentLocations.size(); i++) {
if (_recentLocations.get(i).hasSpeed()) {
Count++;
TotalSpeed += _recentLocations.get(i).getSpeed();
}
}
if (Count > 0)
AverageSpeed = TotalSpeed / Count;
}
}