8

地理的にローカライズされたオブジェクトがいくつかあります(各オブジェクトに緯度と経度があります)。私のアプリは、モバイル デバイスの GPS 位置から 3 km 離れたオブジェクトを表示する必要があります。私は数千のオブジェクトを持っており、それらは広い地域 (たとえば、いくつかの米国の州、いくつかの小さな国) にローカライズされています。非常に近い(数メートル)。

現在、私のアプリは反復検索を実行しています。各オブジェクトについて、GPS 位置を使用して距離を計算し、距離が <= 3KM の場合はオブジェクトを保持し、それ以外の場合は無視します。このアルゴリズムはあまり効率的ではありません。パフォーマンスが向上するアルゴリズムを探しています。

地理座標を使用してオブジェクトを並べ替え、次に GPS 位置の周囲にあるオブジェクトをより迅速に見つける方法があると思います。

私の現在のアイデアは、検索ゾーンを制限するために、北/南/東/西(GPS位置の3kmから)の「極値」で長方形を計算することです。次に、このボックス内のオブジェクトのみの距離を計算します。もっといいものができると思うのですが、思いつきません...

どんな提案でも大歓迎です;-) ありがとう、

セブ。

4

3 に答える 3

0

特殊なデータ構造なしでこれを行う1つの方法は、データの2つのコピーを1回は経度で、もう1回は緯度で並べ替えることです。latとlongの両方で閉じるためにバイナリ検索するものはすべて近くにあります。

同様に、通常のtreap(高速)または赤黒木(変動性が低い)を使用できます。

しかし、rツリーまたはkdツリーを使用することにはおそらく利点があります。私が説明したのは、おそらく、新しい依存関係を取得したり、新しいデータ構造を最初からコーディングしたりすることを避けるためだけです。

于 2012-07-12T21:28:30.537 に答える