SQL语句直接查询距离最近的列表
//6371000是地球赤道半径,0.01745329是圆周率PI/180,以下算法较为精准:
$list = Db::query("select id,name,lon,lat,phone,ROUND(6371000*ACOS(SIN(".$latitude."*0.01745329)*SIN(lat*0.01745329)+COS(".$longitude."*0.01745329-lon*0.01745329)*COS(".$latitude."*0.01745329)*COS(lat*0.01745329))) as distance from `but_customer` where 6371000*ACOS(SIN(".$latitude."*0.01745329)*SIN(lat*0.01745329)+COS(".$longitude."*0.01745329-lon*0.01745329)*COS(".$latitude."*0.01745329)*COS(lat*0.01745329)) < ".$distance." order by distance");
其中,计算两个坐标之间的距离的算法是:
$distance = 6371000*ACOS(SIN($latitude*0.01745329)*SIN($lat*0.01745329)+COS($longitude*0.01745329-$lon*0.01745329)*COS($latitude*0.01745329)*COS($lat*0.01745329));
算出来的单位是米