質問

私は、X百万個の経度緯度点を有するシナリオを持っている。

新しい長い/緯度の点が追加されると、

私はの効率的の知りたい他の点は、ユーザが設定した距離パラメータの範囲内にあるので、私は、リストに追加することができます。

バウンディングボックスをより良いものを得たか。

私はアルゴリズム、参照およびいくつかの実装を見てみたい!;)親切にありがとうございました。

役に立ちましたか?

解決

ほとんど空間分割するをベースに優れているかなりの数のオプションがあります。

一般的な、そして(実装するにはあまりにもタフではありません)、多くの場合、非常に良いオプションは、<のhref =「http://en.wikipedia.org/wiki/Kd-tree」のrel = "nofollowをを使用することですnoreferrer "> KD-ツリーに。 四分木を検索するための実装が容易な、しかし遅いです。あなたのデータの分布、および要件に応じて、他の空間分割アルゴリズムは、より良い行うことが、低メモリ要件、または関連している他の問題を持っています。

他のヒント

この間に合わせと-アプローチはあなたにいくつかの悲しみを保存することがあります。1度ボックスに、地球の表面を分割します。その後、180x360要素の配列を持つことになりますし、あなただけのコーナーの一つは、ユーザーが指定した距離内にあるため、すぐに周りの新しいポイントとすべてのボックスを含むボックスを含むボックスの数が少ない、検索する必要があります。あなたはすぐにボックスがそれらすべてを考慮せずに使用するかを把握するために使用できるいくつかのトリックがあることがわかります。ただ、緯度、経度、ラップアラウンドを忘れないでください。

あなたの場合「のみ」のポイント数百万を持っており、それらがホットスポットにクラスタ化されていない、それはあなたを介して取得することがあります。

理論的に優れた方法:あなたは3次元空間に各ポイントをマッピングして、オクトツリーでそれらを格納することができあなたはすぐに任意の距離内に近くのポイントを見つける聞かせを、。あなたは、変換係数を計算する必要がありますので、当然のことながら、3次元空間での距離は、地球上の大圏距離よりも若干異なります。それはしかし、シンプルでなければなりません。あなたは、実装言語に言及していないが、ほぼ確実にあなたが作業している任意の言語について十分にテストされた八分木の実装があるように起こっている。あなたは、サードパーティのコードを挿入し気にしない場合は、このソリューションはへの道であります行きます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top