3

私の素朴なAndroidの考え方では、これを行う方法は、各オブジェクトをループして、近接度がXの範囲内にあるかどうかを確認し、含まれている場合はオブジェクトを含めることだと思いました。これは、GoogleマップとGeoPointsで行われています。

そうは言っても、これがおそらく最も遅い方法であることを私は知っています。Android Proxmityアルゴリズムを検索しましたが、あまり得られませんでした。私が探しているのは、これに関してより効率的な最良の選択肢です。

見つけられなかった図書館はありますか?

そうでない場合は、これらのLocationオブジェクトをSQLにロードしてから、そこから移動するか、JSONArrayに保持する必要がありますか?

最良のデータ構造を確立したら、Xマイルのユーザーがいるすべての場所を見つけるための最良の方法は何ですか?

私はカットアンドペーストコードを求めているのではなく、これを効率的に行うための最良の方法を求めています。次に、コードをつまずくことができます:)

私の最初の直感は、場所を地域ごとにグループ化することですが、これを行う方法が正確にはわかりません。

数万のデータポイントが存在する可能性があります。

単に正しい方向に向かっていることの助けは大歓迎です。

ちなみに、私が使用していたリモートAPIが..まあ..PLAIN WRONGであり、近接検索からデータポイントを省略していることを発見した後、この分岐点に到達しました。また、電話のデータポイントに配置するだけで、ユーザーがインターネットに接続せずにアプリを実行できるようになり、GPSとこれだけが大きなプラスになることにも気づきました。だから、すべての挫折には機会があります!

4

1 に答える 1

2

答えはGeoPointsの表現によって異なります。これらが並べ替えられていない場合は、すべてをスキャンする必要があります(これは線形時間で行われるため、距離やクラスタリングによる並べ替えの方がコストがかかります)。Location.distanceTo(Location)またはを使用Location.distanceBetween(float, float, float, float, float[])して距離を計算します。

GeoPointsがwrtでソートされた場合。あなたの位置までの距離このタスクははるかに効率的に行うことができますが、サプライヤーはあなたの位置を知らないので、これはできないと思います。

GeoPointがクラスター化されている場合、つまり、中心と半径を持つクラスターのセットがある場合は、位置からクラスターの中心までの距離が制限に半径を加えた範囲内にある各クラスターを選択します。これらのクラスターについては、クラスターに含まれる各GeoPointを確認する必要があります(クラスターの中には、制限が許すよりも位置から離れている可能性があります)。または、エラーを受け入れて、クラスターのすべてのポイントを含めることもできます(半径が比較的小さい場合は、これをお勧めします)。

于 2012-10-05T14:38:02.320 に答える