2

ローカルスポットのデータベースを構築しています。これらの各ローカルスポットは、緯度と経度の座標が設定された状態でmysqlデータベースに保存されています。

ユーザーが自分の場所をフォームに入力する検索を作成したいのですが、私のフォームは、Google MapsGeolocationAPIを介してユーザーの緯度と経度を正常に判別します。

私の問題/質問はこれです。mysqlデータベース内のアイテムの緯度と経度のどのセットが事前に設定された半径(たとえば25マイル)内にあるかをどのように判断できますか。

25マイルの半径から緯度と経度の外側の境界を計算し、その#に一致するアイテムを基本的なmysql selectでチェックする方法はありますか?もしそうなら、マイルと緯度/経度の間の変換は何でしょうか?そうでない場合、誰もが考えることができるこれをやってのける他の方法はありますか?

ありがとうございました!!

4

2 に答える 2

2

@Skidrowが以前に書いたものとほぼ同じですが、phpで書かれています。すでにロードした結果を確認したい場合はPhpの方が良いかもしれません。そうでない場合は、mysqlのすべての投稿を繰り返す必要があります。その場合、mysqlバージョンの方が良いでしょう

function calculateDistance($targetLat, $targetLng, $againstLat, $againstLng, $units = 'miles')
{
    $result = 3958.75 * acos(
        sin($targetLat / 57.2958) * sin($againstLat / 57.2958) +
            cos($targetLat / 57.2958) * cos($againstLat / 57.2958) *
                cos($againstLng / 57.2958 - $targetLng / 57.2958)
    );

    switch ($units)
    {
        default:
        case "":
        case "miles":
            $result *= 1;
            break;
    }

    return $result;
}

この機能を使用してテストする

$ target*=データベース内のスポット

$ Against*=ユーザーの場所

于 2012-11-18T01:22:53.563 に答える
1

多くの方法があります。空間インデックスまたは半正矢関数を使用できます。近接検索を作成することもできます。ここを読んでください:https ://developers.google.com/maps/articles/geospatial 。半正矢関数は、球上の2点間の大円距離です。

于 2012-11-17T23:00:49.847 に答える