web-dev-qa-db-ja.com

緯度と経度の2点を指定して距離を計算します

重複の可能性:
MySQLの緯度と経度のテーブル設定

私はこの質問がおそらく何度も尋ねられたことを知っています、私はたくさん研究しました、そして私は特定のことで助けが必要です。

フォームとユーザーが経度と緯度を入力し、データベースに経度と緯度が含まれているとします。半径15マイル以内にあるテーブル内のポイントを検索するにはどうすればよいでしょうか。

17
Grigor

2点間の距離を計算する式を使用できます。例えば:

function get_distance($latitude1, $longitude1, $latitude2, $longitude2, $unit = 'Mi') { 
    $theta = $longitude1 - $longitude2; 
    $distance = (sin(deg2rad($latitude1)) * sin(deg2rad($latitude2))) + 
                (cos(deg2rad($latitude1)) * cos(deg2rad($latitude2)) * 
                cos(deg2rad($theta))); 
    $distance = acos($distance); 
    $distance = rad2deg($distance); 
    $distance = $distance * 60 * 1.1515; 
    switch($unit) { 
        case 'Mi': 
            break; 
        case 'Km' : 
            $distance = $distance * 1.609344; 
    } 
    return (round($distance,2)); 
}

次のようなこともできます。

$query = "SELECT *,(((acos(sin((".$latitude."*pi()/180)) * 
            sin((`Latitude`*pi()/180))+cos((".$latitude."*pi()/180)) * 
            cos((`Latitude`*pi()/180)) * cos(((".$longitude."- `Longitude`)* 
            pi()/180))))*180/pi())*60*1.1515
        ) as distance 
        FROM `MyTable` 
        HAVING distance >= ".$distance.";
42
claire

2点の緯度/経度がある場合は、デルタ緯度とデルタロンを取得し、これを緯度に沿った距離と経度に沿った距離に変換し、ピタゴラスの定理を使用できます。

http://www.movable-type.co.uk/scripts/latlong.html のようなページを見たことがありますか?これには、距離を計算するいくつかの方法があります。したがって、ポイントのリストを確認するときは、式を使用して各ポイントから対象のポイントまでの距離を計算し、R <15マイルを満たすポイントのみを保持します。

3
Oliver