tp5 在查询的时候计算坐标距离

做项目的时候遇到一个问题,mysql查询数据的时候要求按照距离排序,那么数据库的记录本身就是有经纬度字段了,但是客户端发来的经纬度如果每次都去调用第三方接口,就会大大影响加载速度,这个思路不可行。

然后在网上搜到了一个办法,速度快,误差不算大,下面把代码贴出来(本人用的Thinkphp5):

 1   $EARTH=6378.137; //固定参数 地球半径
 2   $PI=3.1415926535898; //固定参数 圆周率
 3   $lng=$tmp[0];
 4   $lat=$tmp[1]; //发起请求的经纬度
 5   $result=self::where($map)
 6         ->field("*,(2 * $EARTH* ASIN(SQRT(POW(SIN($PI*(".$lat."-lat)/360),2)+COS($PI*".$lat."/180)* COS(lat * $PI/180)*POW(SIN($PI*(".$lng."-longi)/360),2)))) as juli")
 7         ->limit($page*$limit-$limit,$limit)
 8         ->order($order)
 9            
10         ->select();

juli:单位是km,如果需要m在后面*1000即可。

该方法计算的距离是直线距离。

posted @ 2018-03-08 10:18  jackalex  阅读(888)  评论(1)    收藏  举报