0

クライアントがアプリにログインしているときに移動するルート パスを保存する Android 関数を作成しています。Uber がライド パスを追跡する方法のようなものです。

ほとんどの場合、これは問題なく動作します。以前に述べたように、GoogleLocationclient API は「onLocationChanged」関数で「BAD」の場所を返すことがあります。

「BAD」位置を定義させてください:- これらは LocationRequest.setPriority = LocationRequest.PRIORITY_HIGH_ACCURACY で取得された位置更新であり、返された Location は Location.getAccuracy() < 50 ですが、実際の現在位置から 1000 メートル以上離れています.

したがって、この問題に対処するために、3 つの連続する位置の更新をキャッシュして相互に比較し、1 番目と 3 番目の場所までの距離が 1 番目と 3 番目の場所の間の場所よりも小さい場合にのみ中間の場所を保存する 3 ポイント キューをセットアップしました。 3点目。

このアプローチは、2 つの正確なポイントの間にエラー ポイントが 1 つしか表示されない場合にうまく機能します。

私の問題

2 つ以上の「BAD」ロケーションを連続して受信すると、このロジックは正しくないロケーションを除外できず、今後のポイントは検証されません。:(

誰でも提案できますか:- a) 位置情報の更新のフィルタリングを最適化するためのアルゴリズム

                     or

b) 旅行のすべてのロケーション ポイントを収集した後、「BAD」ロケーションを除外するアルゴリズム。

どんな助けでも大歓迎です。これが重複した質問である場合は、親切に私の見落としを許し、元の質問にリンクしてください:)。

ティア。

4

1 に答える 1

1

私は次のことを試します:

1) Save a timestamp with every location point. 
2) Now calculate the movement speed between your actual point and your last point based on the timestamp and the location points
3) If the movement speed is higher than what is possible -> throw this point away / else keep him and move on
于 2016-12-14T07:11:08.800 に答える