まず、次のように考えを述べさせてください。
指定したルートまでのユーザーの距離を確認したい。ルートは複数のロケーション ポイント (図では、ポイント a、b、c、d) で構成されています。隣接する 2 つの点がベクトルを表します (図の青い線 ab、bc、cd)
次に、アプリケーションに移動します(特にアンドロイドですが、それはこの質問の一部ではありません)ユーザーがルートに沿って移動している間、ユーザーの位置が追跡されます。私が確認したいすべての新しい場所で、ユーザーがまだルート上にいる (または X の距離内にある) かどうかを確認します。
ルートに沿って 3 つの可能な場所を描きました。
場所 1 は問題ありません。ポイント 1 からベクトル ab に垂線を下ろします。これにより、このベクトル上の位置ポイントが得られ、2 つのポイント間の距離を計算できます (android: を使用
Location.distanceTo()
) 。場所 2 ベクトルを扱っているため、開始も終了もありません。黒い線は、ベクトル ab の射影です。最も近い距離を計算すると、ベクトル ab までの距離は近いが、ベクトル bc からは遠い距離になります。実際、bc までの距離を計算する必要があります。これがルートの進行方法だからです。しかし、距離を計算するためにどのベクトルを選択する必要があるかをアルゴリズムで知るにはどうすればよいでしょうか?
場所 3 は、ベクトル ab または bc で計算する可能性を与えてくれます。どちらもほぼ同じくらい近いです。どちらを選択するかを知る方法は?
これを切り上げるには:
私は位置点を持つ配列を持っています:
{[lat1, lon1], [lat2, lon2],[...]}
私のアプリケーションは、ユーザーの位置を追跡しています。新しい場所を配列内のこのトラックと比較したいと思います。
誰かが問題をカバーしているアルゴリズムを知っていますか、または誰かがアルゴリズムで私を助けてくれますか? (疑似コードで十分です)
//編集: Quadtree アルゴリズムについて読みました。おそらくそれは、Soonts の実装に加えてオプションです。