特定のコード例を尋ねる前に、次の疑似コードのようなクエリを作成できるかどうかを確認したいと思います。
緯度/経度=-特定の緯度/経度のポイントから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のソリューションとは異なりますが、将来空間リクエストを続けたい場合は、より良いソリューションです。