特定の GPS 位置から見つけるための Java プログラムを作成する必要がありますP
。(GPS 位置のセットからの) GPS 位置の最も近いセット (2 つの位置) は GPS 位置です。状況は図に示されています。ここでマークされているすべての位置は GPS 位置です。指定された位置から、この場合P
は最も近いポイントのセットを見つけたいと思います。P
(B,C)
誰かがこれに関連するアルゴリズムまたはコード スニップネットを共有できれば、非常に役に立ちます。
P と他のすべての点の間の距離を計算してから、最小値を取得する必要があります。それは明らかな部分でした。
難しいのは、2 つの GPS 座標間の距離を計算することです。GPS は、WGS84 測地線システムを使用して、地球上のポイントを表します。球面上の距離を計算する方法もいくつかあります (航路距離と大圏距離が主な方法です)。ユークリッド距離
は、緯度がゼロでない場合、緯度 1° < 経度 1° であるため、球体上では常に偽です (近くにさえありません) 。あなたのためにそれをします。
GDAL を使用して、他の測地系のポイント表現を変換できます。たとえば、平面測地系にポイントを投影し、(x、y、z) 座標を使用して、距離を計算できます (または、距離の 2 乗 = x²+y²+z²)。
GoogleマップAPIは、たまたますでに使用している場合、GPS座標の使いやすい距離メソッドを提供すると思います。
ポイントをリストに保存してから、隣接するポイントまたは最小距離ポイントを見つけます。
この投稿はあなたに役立つかもしれません。
アルゴリズムの実装を探している場合は、R-Trees を調べてください。これらは、ポイントまたはバウンディング ボックス タイプの検索を探すのに適した方法です。
R-Tree アルゴリズムを実装した、私にとってうまく機能する、しばらくの間使用してきた優れたライブラリがあります。JSI、Java Spatial Index ( http://jsi.sourceforge.net/ ) を確認してください。
API の探索はあなたに任せます。幸運を!
データから四分木を作成することを検討するかもしれません。これは、2 次元の空間データを表す方法であり、log(n) 時間で最近傍検索を簡単に行うことができます。ツリーの構築は nlog(n) ですが、構築と最近傍を考慮する必要がある場合は、nlog(n) の複雑さがあります。
四分木 (kd 木の 2 次元バージョン) の最近傍アルゴリズムを見つけるのは難しくありません。ウィキはここでそれの一般的な概要を提供します
これを他の次元数に拡張する必要がある場合は、KD Treesを参照してください。
編集:クアッドツリーを構築する必要がある場合は、他のすべてのポイントをループして距離を見つけ、最小の 2 を追跡する方が高速であることがわかりました。距離は、三角形とピタゴラスの定理を思い出してください。