首页 > 小技术 > SQL语句直接查询距离最近的列表

SQL语句直接查询距离最近的列表

小技术
2022
05/11
11:13

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

算出来的单位是米

声明:《SQL语句直接查询距离最近的列表》一文由花火盒(http://www.huahuohe.com)网友供稿,版权归原作者本人所有,转载请注明出处。如果您对文章有异议,可发邮件到hi@webimage.cn处理!
相关文章