具体的なコード例を尋ねる前に、次の疑似コードのようなクエリを作成できるかどうかを尋ねたかっただけです。
緯度/経度 = -特定の緯度/経度ポイントから x マイル以内- であるテーブルからアイテムを選択します
それは可能ですか?それとも、いくつかのフープをジャンプする必要がありますか? 推奨される良いアプローチはどれも素晴らしいでしょう!
具体的なコード例を尋ねる前に、次の疑似コードのようなクエリを作成できるかどうかを尋ねたかっただけです。
緯度/経度 = -特定の緯度/経度ポイントから x マイル以内- であるテーブルからアイテムを選択します
それは可能ですか?それとも、いくつかのフープをジャンプする必要がありますか? 推奨される良いアプローチはどれも素晴らしいでしょう!
Haversine 式を検索する必要がありますが、次のような方法で開始することをお勧めします。
最初の URL からの引用:
以下は、座標 37, -122 から半径 25 マイル以内にある最も近い 20 の場所を見つける SQL ステートメントです。その行の緯度/経度とターゲットの緯度/経度に基づいて距離を計算し、距離の値が 25 未満の行のみを要求し、クエリ全体を距離で並べ替え、結果を 20 に制限します。マイルではなくキロメートルで検索するには、3959 を 6371 に置き換えます。
SELECT
id,
( 3959
* acos( cos( radians(37) )
* cos( radians( lat ) )
* cos( radians( lng ) - radians(-122) )
+ sin( radians(37) )
* sin( radians( lat ) )
)
)
AS distance
FROM markers
HAVING distance < 25
ORDER BY distance
LIMIT 0 , 20;
この種の操作には、SpatiaLite または PostGIS を使用することを強くお勧めします。コードを処理しようとしている種類の関数が組み込まれています。また、MySQL には実際には存在しない空間データも適切にサポートしています。
MySQL での正確な解決策ではありませんが、今後も空間リクエストを続けたい場合はより良い解決策です。