重複の可能性:
MySQLの緯度と経度のテーブル設定
私はこの質問がおそらく何度も尋ねられたことを知っています、私はたくさん研究しました、そして私は特定のことで助けが必要です。
フォームとユーザーが経度と緯度を入力し、データベースに経度と緯度が含まれているとします。半径15マイル以内にあるテーブル内のポイントを検索するにはどうすればよいでしょうか。
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.";
2点の緯度/経度がある場合は、デルタ緯度とデルタロンを取得し、これを緯度に沿った距離と経度に沿った距離に変換し、ピタゴラスの定理を使用できます。
http://www.movable-type.co.uk/scripts/latlong.html のようなページを見たことがありますか?これには、距離を計算するいくつかの方法があります。したがって、ポイントのリストを確認するときは、式を使用して各ポイントから対象のポイントまでの距離を計算し、R <15マイルを満たすポイントのみを保持します。