27

具体的なコード例を尋ねる前に、次の疑似コードのようなクエリを作成できるかどうかを尋ねたかっただけです。

緯度/経度 = -特定の緯度/経度ポイントから x マイル以内- であるテーブルからアイテムを選択します

それは可能ですか?それとも、いくつかのフープをジャンプする必要がありますか? 推奨される良いアプローチはどれも素晴らしいでしょう!

4

2 に答える 2

59

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;
于 2011-01-14T02:05:43.733 に答える
7

この種の操作には、SpatiaLite または PostGIS を使用することを強くお勧めします。コードを処理しようとしている種類の関数が組み込まれています。また、MySQL には実際には存在しない空間データも適切にサポートしています。

MySQL での正確な解決策ではありませんが、今後も空間リクエストを続けたい場合はより良い解決策です。

于 2011-01-14T20:11:59.250 に答える