1

私はあなたの近くの関心のあるポイント (POI) を表示する Android アプリを設計しています。POI はデータベースに保存されます。このデータベースを使用して、近くの POI を効率的に検索し、おそらく最も近い 100 か所の場所の並べ替えられたリストを返すようにしたいと考えています。

データベースを効率的に検索できるようにするには、データベースをどのように設計すればよいか考えています。使用すべき特定の形式の SQL や、検索を高速化するための特別なアルゴリズムはありますか? データベースに 100 か所しかない場合は問題ありませんが、10,000 か所以上になると難しくなることが想像できます。

4

2 に答える 2

1

優れた多次元インデックスを持つデータベースを使用してください。これにより、データベースは効率的なバウンディング ボックス クエリを実行できます。バウンディング ボックス クエリ用の GIST インデックスがあるため、PostgreSQL が適しています。MySQL と MS SQL には許容できる機能があります。

直面するもう 1 つの問題は、座標系の選択です。GPS の緯度、経度の座標は角度です。したがって、距離計算を行う方法の選択肢があります。

1) すべての緯度、経度をデカルト X、Y 座標に変換する - これは小さな (米国の州) サイズの領域で機能します。これには、緯度、経度、デカルト座標の間で変換する地図投影関数が必要です。

2) hasersine 式http://www.movable-type.co.uk/scripts/latlong.htmlを使用します。しかし、注意してください!インデックス キーは Lat,Longs です。この選択には副作用が伴う場合があります。

PostGIS は PostgreSQL GIS アプリケーションです。最も近い点のクエリには重いですが、機能します。

于 2012-10-01T17:46:47.390 に答える
0

PostGISを使う

http://en.wikipedia.org/wiki/PostGIS

于 2012-09-30T18:08:49.087 に答える