欢迎访问快速建站网站我们提供建站工具系统

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

作者:jcmp      发布时间:2021-04-19      浏览量:0
首先、地球是球体,计算A点和B点之间的距

首先、地球是球体,计算A点和B点之间的距离到底是计算他们之间的直线距离还是球面距离呢?

1、大家来认识一个公式:

//Lat1、Lng1表示A点纬度和经度,Lat2 Lng2 表示B点纬度和经度。

//a = Lat1 – Lat2为两点纬度之差 b = Lng1 -Lng2 为两点经度之差。

//6378.137为地球半径,单位为公里

2、//计算出来的结果单位为公里

3、PHP的实现方法:

4、方法一:

5、/**

* @desc 根据两点间的经纬度计算距离

* @param float $lat 纬度值

* @param float $lng 经度值

6、*/

functiongetDistance($lat1, $lng1, $lat2, $lng2)。

7、{

$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

8、*/

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

9、}

10、方法二、

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;//计算出来的结果单位为米。

11、return floor($s);

12、}

以上只是解决了A点和B点地理位置之间的距离,也就是说能知道目的地离你有多远!但是还是无法找到数据列表!下面提供一个可行方案:

$myLat = $postObj->Location_X;//接收到的当前位置的纬度。

$myLng = $postObj->Location_Y;//接收到的当前位置的经度。

$Label = $postObj->Label;//接收到的当前地理位置信息。

$Label = iconv("UTF-8","GBK",$Label);

$find = stripos($Label,' ');//过滤掉邮政编码 纯属为了整洁性。

13、if($find!==false)

14、{

$Label = substr($Label,0,$find);

15、}

16、//以下为核心代码

$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;//最小经度。

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