0

GPS 位置のデータベースを保存し、特定の半径内のポイントと最も近いポイントを見つけるクエリを実行しようとしています。私はmysqlを使用しており、空間拡張を見てきました。位置半径クエリで探していることを実際に空間拡張を使用して行う方法がわかるかどうかはわかりません。

だからここに私のオプションについて考えていることがあります:

  1. 緯度と経度の gps 座標を浮動インデックス変数として db に保存します。ポイントの gps 座標と範囲を取得したら、緯度と経度の最大値と最小値を計算してクエリを実行し、これらの距離関数に基づいて並べ替えて並べ替えます。

  2. 空間拡張を使用します。私はこれがうまくいくと確信しているわけではありません。Distance() 関数は実装されていません。空間インデックスを使用するには、境界ボックスを見つけて (実行可能)、MBRContains 境界ボックス関数を呼び出して、この境界ボックス内にあるポイントを見つける必要があります。ただし、ポイントにはゼロの境界があるため、MBRContains 関数はポイントに対して機能しません。

これを行うための標準的な方法が何であるかはわかりませんが(存在しないようです)、経験/考え/決定の助けの言葉をいただければ幸いです。私は現在mysql 5.13を使用していますが、5.5でも距離メトリックがないことを確信しています。

また、2.が機能する場合でも、どちらが高速になりますか? あなたの考えを教えてください。特に、迅速かつ大規模な検索で何かが機能することを確信している/見たことがある場合は特にそうです!

Mysql 空間インデックス: http://dev.mysql.com/doc/refman/5.5/en/using-a-spatial-index.html

4

2 に答える 2

1

このようなものは、座標と任意のポイント(この例では「原点」)の間の距離を取得するために機能するはずです。

SELECT 
place.name,
place.foo,
ROUND( SQRT(
   POW((69.1 * ({$origin->lat} - place.lat)), 2) 
 + POW((53.0 * ({$origin->lon} - place.lon)), 2)
), 1) AS distance
FROM place
ORDER BY distance ASC

お役に立てば幸いです...

于 2010-07-08T02:52:37.237 に答える
0

gps座標はどれくらい接近していますか?地球の曲率が問題にならないように比較的接近している場合は、最初に直線距離を使用してクエリを実行し、それがどのように機能するかを確認できます。ただし、これには全表スキャンが必要であり、ポイントが十分にクラスター化されていない場合、正確な結果が得られない可能性があります。その時点で、バウンディングボックスと大きな弧の距離の計算に進む必要があります。

于 2010-07-08T02:54:00.800 に答える