首先、地球是球体,计算A点和B点之间的距离到底是计算他们之间的直线距离还是球面距离呢?
大家来认识一个公式:
//Lat1、Lng1表示A点纬度和经度,Lat2 Lng2 表示B点纬度和经度
//a = Lat1 – Lat2为两点纬度之差 b = Lng1 -Lng2 为两点经度之差
//6378.137为地球半径,单位为公里
//计算出来的结果单位为公里
PHP的实现方法:
方法一:
/**
* @desc 根据两点间的经纬度计算距离
* @param float $lat 纬度值
* @param float $lng 经度值
*/
functiongetDistance($lat1, $lng1, $lat2, $lng2)
{
$earthRadius= 6367000; //approximate radius of earth in meters
/*Convert these degrees to radians to work with the formula*/
$lat1= ($lat1* pi() ) / 180;
$lng1= ($lng1* pi() ) / 180;
$lat2= ($lat2* pi() ) / 180;
$lng2= ($lng2* pi() ) / 180;
/* Using the Haversine formula
* http://en.wikipedia.org/wiki/Haversine_formula
* calculate the distance
*/
$calcLongitude= $lng2- $lng1;
$calcLatitude= $lat2- $lat1;
$stepOne= pow(sin($calcLatitude/ 2), 2) + cos($lat1) * cos($lat2) * pow(sin($calcLongitude/ 2), 2);
$stepTwo= 2 * asin(min(1, sqrt($stepOne)));
$calculatedDistance= $earthRadius* $stepTwo;
return round($calculatedDistance);
}
方法二、
functionGetDistance($lng1,$lat1,$lng2,$lat2){
//将角度转为狐度,deg2rad()函数将角度转换为弧度
$radLat1=deg2rad($lat1);
$radLat2=deg2rad($lat2);
$radLng1=deg2rad($lng1);
$radLng2=deg2rad($lng2);
$a=$radLat1-$radLat2;
$b=$radLng1-$radLng2;
$s=2*asin(sqrt(pow(sin($a/2),2)+cos($radLat1)*cos($radLat2)*pow(sin($b/2),2)))*6378.137*1000;//计算出来的结果单位为米
return floor($s);
}
以上只是解决了A点和B点地理位置之间的距离,也就是说能知道目的地离你有多远!但是还是无法找到数据列表!下面提供一个可行方案:
$myLat = $postObj->Location_X;//接收到的当前位置的纬度
$myLng = $postObj->Location_Y;//接收到的当前位置的经度
$Label = $postObj->Label;//接收到的当前地理位置信息
$Label = iconv("UTF-8","GBK",$Label);
$find = stripos($Label,' ');//过滤掉邮政编码 纯属为了整洁性
if($find!==false)
{
$Label = substr($Label,0,$find);
}
//以下为核心代码
$range = 180 / pi() * 1 / 6372.797; //里面的 1 就代表搜索 1km 之内,单位km
$lngR = $range / cos($myLat * pi() / 180);
$maxLat = $myLat + $range;//最大纬度
$minLat = $myLat - $range;//最小纬度
$maxLng = $myLng + $lngR;//最大经度
$minLng = $myLng - $lngR;//最小经度
//得出这四个值以后,就可以根据你数据库里存的经纬度信息查找记录了~(还不知道怎么办的自己找块豆腐吧)