2013-01-07 2 views
5

を散乱しましたいくつかの例で散在している、またはそれは私が歩いている道に沿って行くだろう、そして、すべての距離を1マイル離れたところに急にジャンプする。これを修正する方法はありますか?私が推測する正確なチェックのいくつかの並べ替え?AndroidのGPS座標は、私が正常に動作しているように見えるその下に次のコードを持って

更新

基本的に私の問題は、一例として、次のようになります - GPS Jitter

アップデート2

私はこの恵み作っていないと考えるが、私は同様かもしれない考え出しここで何が起こっているのかを完全に理解し、私のアプローチが殺し過ぎたのかどうかを確認してください。私は3mの精度を持っているにもかかわらず、私の座標にはジッタがあるという同じ問題がまだあります。これは利用可能な衛星などになる可能性があります。わかりませんが、基本的にはどのようにこれらすべての他のアプリケーション、特に運動アプリケーションは、同じ状況下でそのようなスムーズな読み取りを得ることができます。

私はQuoraにいて、これを見つけることができましたDoes any running app have a feature of filtering GPS data to get more accurate tracking?残念ながら、あなたが望むなら、カルマンフィルタを使うことができるということを除けば、残念ながら私の問題はあまり理解できませんでしたが、ほとんどのアプリがこれを実装しているとは思わない。

仲間の開発者が、彼らが何をしているのかを大いに感謝するいくつかの擬似コードと共有したい場合は、とにかく。私はカルマンと付き合っているのですが、アルゴリズムを実装するのが簡単でなければならないと確信しています。

コンテキスト:これはモバイルの歩行者用アプリケーションです。私はきちんと適切にとても仕事が最小二乗法を取得するために実装する必要があるだろうか擬似コードわからないが、これは、良いスタートだった:私は Create a smooth curve from a series of GPS coordinates Smooth gps dataからの情報を収集しようとした質問SO関連

私は私がそれを正しくしたことを確認するためにgoogleマップのような何かで見ることができるスプラインのGPSデータを持っています。私はこの問題が私が扱っていた一般的なXとYのデータで、GEOの座標ではないと思っています。何かをMATLABでテストして書くことができます。あなたの基準はNETWORK_PROVIDERとして最高のプロバイダを識別するため

アップデート3

私はあなたが取得している何 https://www.dropbox.com/s/ilsf8snao2no65e/gpsdata2.png

コード https://gist.github.com/4505688

+2

あなたの電源要件と精度は互いに矛盾しているようです。 ACCURACY_FINEの結果を提供する唯一のプロバイダは、LocationManager.GPS_PROVIDERです。 locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER、0、0、MyLocationListener)のような基準を作成するのではなく、直接使用してみませんか? –

+2

また、デバイスが空になっていない/その他の理由により、フィクスチャが遅れているために散在することがあります。 –

+0

さて、私は元々はそれを元に戻していたが、基準がより良くなり、明日もまたやり直すと考えていたので、それを元に戻す。オープンスカイのノートでは、私はテストを実行するときに空の領域にいましたが、マップミーウォークのようなプログラムを実行しても散在していませんでした。 – eWizardII

答えて

4

が供給していますめちゃめちゃGPSデータの画像です。 あなたの場所を特定するのではなく、あなたの装置をカバーするセルタワーの場所を提供します。建物の外にいるときは、正確に地理的位置の精度を得るためにGPS_PROVIDERを使用する方が良いです。あなたのデバイスが別のセルタワーの範囲に来るので、場所のジャンプが起こるので、なぜあなたは分散した座標を取得しますか?直接GPS_PROVIDERを使用すると、これまでに得られる最高のソリューションです。

+0

ニテンからのアドバイスのおかげで、私はGPSだけを次のように実装しました: // GPSリーダー LocationListener locationListener = new MyLocationListener(); LocationManager lm =(LocationManager)getSystemService(Context.LOCATION_SERVICE); lm.requestLocationUpdates(LocationManager.GPS_PROVIDER、0、0、 locationListener); しかし問題はまだあります。 – eWizardII

+0

洞察をお寄せいただきありがとうございます。残念なことに、審査のために私のSOの質問の上にはなかったのですが、基本的にはこれからいくつかのヒントがありました。http://stackoverflow.com/questions/6181704/goodway-of-getting-the-私は、別のプログラムの実装を慎重に研究しました://github.com/marcfasel/LocationMapper。私は、ロケーションマネージャを扱うために他のクラスを使用していたため、このクラスがなくても再実装しました。すべてがうまくいくようです。今、バッテリ寿命を最適化する必要があります。みんなありがとう! :) – eWizardII

+0

ありがとうございます。シンプルで素晴らしい説明。私の即時の問題を修正しました。私はKalmanとblahblahblahで入信データを再フィルタリングすることを考え始めていましたが、最終的にはロケーションデータプロバイダの選択問題でした。すばらしいです! Skobblerを使用するユーザーの場合は – cedbeu

2

チェックthisレトマイヤー(コードを含む)の記事。それはあなたに考えるべき多くの情報を与えるはずです。少なくとも距離と時間の最小値を設定する必要があります。

lm.requestLocationUpdates(lm.getBestProvider(criteria, true), 5000, 20, 
     locationListener); 

また、複数のプロバイダを組み合わせて、現時点で可能な最良の座標を得ることができます。がんばろう!

+0

基準設定をもう一度試し、その結果を確認します。 – eWizardII

+0

私はあなたのアドバイスを実装しましたが、私はまだGPS散乱問題にぶつかりました - 次の画像を参照してください - https://www.dropbox.com/s/ilsf8snao2no65e/gpsdata2.png青いパスが実際のパスです - しかし赤はGPSが記録されます。 – eWizardII

+0

そして、この座標の正確さはどうですか?あなたはマップを描くこともできますか?あなたはあなたのスカイプを私に郵送することができます。 – Evos

5

GPSデータ自体にエラーが発生する可能性があります。すべてのLocationManagerが正しく設定されていても、その場所に時々ジッターが表示されます。注意すべき

精度

ことの一つは、GPSの精度は唯一あなたの計算は、信号が受信されたGPSを与えられたどのように良いの推定値を与えることです。システマティックエラーにより、正確な数値(< 10m)が得られますが、依然として大きな位置エラーが発生しています。このため、精度が非常に良い場合でもジッタが表示されます。精度の測定値は、非常に大きな誤差(> 100m)を取り除くのに適していますが、より低いレベルでは、計算が収束したことを示すだけです。

フィルタリング

あなたは、できるだけをすればフィルタリングは、多くのことのように、最善の方法です。精度フィルタは大きな誤差を取り除くことができなければならず、良好な閾値で終わるとスムーズなデータを得ることができます。

実行中のアプリケーションの位置変更にしきい値を設定すると、いくつかのメリットがあります。例えば、走者は時間の経過と共にある一定の距離しかカバーすることができません。また、上のスレッショルド(Usain Bolt Cutoff)を設定することで、悪い点を除去できるはずです。その問題は、最初のポイントがエラーの場合は、他のポイントをすべて削除することになります。

カルマンフィルタ

カルマンフィルタは、優れたソリューションであり、私は私が働いているナビゲーションアプリ上でそれを実装しています。結果は非常に合理的であり、GPSが不良であるか利用できない場合には、限定的な推測航法を可能にする。残念ながら、私はソースコードを共有することはできませんが、あなたがその方法をとることを決めた場合、私はあなたに少しの指導を与えることができます。最適な結果は、6DoFフィルタから得られ、ここでは加速度と速度を計算し、位置を推定するために使用します。最も簡単な解決策ではありませんが、良い結果が得られました。

最小二乗

位置をフィルタリングするためにリアルタイムで使用することができるので、カルマンフィルタが大きいです。それはそれ自身の状態を追跡し、古い場所を保存する必要はありません。しかし、一方で、あなたのルートを後処理したいなら、最小二乗適合が最適な方法です。 (カルマンはLSQ式から導き出される)。私は後処理はあまりしませんが、古い教科書をいくつか掘り起こすことができると思います。しかし理論は同じでなければならない。

ほとんどのGPSデバイスはかなり優れており、私が見たすべてのテストから、あなたの例で見ているジッタはよく見かけることはありません。しかし、私がカルマンフィルタを実装した大きな利点と理由は、移動距離と速度計算がはるかに正確であるということです。

+0

"最初のポイントがエラーの場合は、他のポイントをすべて削除するという問題があります。"古典的な問題は、ナッツを運転している –

2

単純なアプローチは、古いまたは不正確なデータを捨てて、経度および緯度。

private static final long WILDLY_OUT = 15; 
private static final long TOO_OLD = 30000; 
private static final long NO_SAMPLES = 5; 

double lastLocationTime; 

double calclongitude(Location location, double oldLongitude) { 
    double newLongitude = oldLongitude; 

    if (location.getAccuracy() < WILDLY_OUT) { 
     newLongitude = (NO_SAMPLES * oldLongitude + location 
       .getLongitude())/(NO_SAMPLES + 1); 
     lastLocationTime = System.currentTimeMillis(); 
    } 

    if (lastLocationTime > TOO_OLD) { 
     newLongitude = location.getLongitude(); 
    } 

    return newLongitude; 
} 

また、緯度も同じです。

関連する問題