2011-12-22 23 views
17

可能性の重複:私はこの質問は、おそらく何度も頼まれました知っている
MySQL latitude and Longitude table setup計算距離与えられた2点を、緯度と経度

は、私は多くのことを研究してきたと私は必要特定の事を助けてください。

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

+4

ルック - > –

答えて

42

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)); 
} 

ます。また、何かのように行うことができます。右に「関連」セクションのトップ10のリンクで

$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."; 
+0

は私にエラー不明な列「距離を与えます'in' where節 ' – Grigor

+1

あなたはどのバージョンのmysqlを持っていますか? HAVINGに変更してみてください。 mysql 5.xにはwhere句に関するいくつかの問題があります。 http://dev.mysql.com/doc/refman/5.0/en/problems-with-alias.html – claire

+2

すべての情報について、MySQL-Queryは距離をマイルで計算します。 km単位の距離を求めるには、PHPの例のように1.609344を掛けなければなりません。 – cldrr

3

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

http://www.movable-type.co.uk/scripts/latlong.htmlのようなページを見ましたか?これには、距離を計算するいくつかの方法があります。だからあなたのポイントのリストを調べるときには、各ポイントから注目ポイントまでの距離を計算し、R < 15マイルを満たすものだけを維持するためにこの公式を使用します。

関連する問題