各行にlat-longデータを持つレストランテーブルがあります。緯度経度に基づいて半径検索を実行するためのSQLクエリ
指定された半径内のすべてのレストランを検索する検索を実行するクエリを作成する必要があります。等の1マイル、5マイル
私たちは、この目的のために次のクエリを持っている:
***Parameters***
Longitude: -74.008680
Latitude: 40.711676
Radius: 1 mile
***Query***
SELECT *
FROM restaurant
WHERE (
POW((69.1 * (Longitude - -74.008680) * cos(40.711676/57.3)) , 2) + POW((69.1 * (Latitude - 40.711676)) , 2)
) < (1 *1);
テーブルを約23K行があります。結果セットのサイズは時々奇妙です。 5.4マイルの検索で880行を返し、5.5マイルで21K行戻します。
この表にはnycのレストランデータが含まれているため、実際の配布は結果セットごとに行われません。
質問:このクエリでは何も間違っていますか?
DB:MySQLの、経度:DECIMAL(10,6)、緯度:DECIMAL(10,6)
何が問題なのですか。初心者にとっては、フラット化のために誤差のマージンが小さいので、緯度/経度座標ではなくUTMを使用したいと考えています。 –
[この質問に対する回答を確認してください](http://stackoverflow.com/questions/574691)/mysql-great-circle-distance-haversine-formula)を使用します。同様の問題。 – Ramin