POIロケーターアプリを開発しています。1600を超える場所でJSONファイルを解析しています。このリストを現在のユーザーの場所と効率的に比較して、最も近い10を取得するにはどうすればよいでしょうか。
編集 ローカルJSONファイルを使用したいので、アプリはサーバーを使用していません。
POIロケーターアプリを開発しています。1600を超える場所でJSONファイルを解析しています。このリストを現在のユーザーの場所と効率的に比較して、最も近い10を取得するにはどうすればよいでしょうか。
編集 ローカルJSONファイルを使用したいので、アプリはサーバーを使用していません。
forループを使用し、場所とユーザーの場所の間の距離を測定することで修正しました。
distance = locationA.distanceTo(locationB);
if (distance <= 1000 * 10) //finding all within 10km Radius.{
ADD GEOPOINT HERE
}
地理空間クエリをサポートするデータベース(mongodbなど)に1600の場所を保存できるとよいでしょう。データベースを直接クエリして、ユーザーの特定の緯度と経度に最も近いN個の場所を特定できます。
バードビューアプローチで距離を見つける場合は、場所を照会し、ここにある式を使用して距離を確認できます。しかし、道路(グラフ)を考慮に入れる場合は、グーグルマップのような何らかのパスファインディングサービスを使用するか、独自のパスファインディングサービスを使用する必要があります。(私が知る限り、Androidには組み込みのメカニズムはありません。)
この種のアプリも作成しており、MySQLとMongoDBでいくつかのパフォーマンステストを実行しました。MongoDBはドキュメントベースであり、データをjson形式で保存するため、ロケーションベースのクエリ(ユーザーに最も近いレストランなど)は非常に高速に完了して返されます。私が覚えている限りでは、MySQLよりも約10倍高速でした。したがって、アプリケーションが現在no-sqlデータベースを使用していない場合でも、プロジェクトの場所を計算する部分だけでもMongoDBを使用することを強くお勧めします。