根据当前地理位置经纬度计算1000米以内的数据的实现思路

首先、地球是球体,计算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;//最小经度

//得出这四个值以后,就可以根据你数据库里存的经纬度信息查找记录了~(还不知道怎么办的自己找块豆腐吧)

你可能感兴趣的:(根据当前地理位置经纬度计算1000米以内的数据的实现思路)