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即可。
该方法计算的距离是直线距离。

浙公网安备 33010602011771号