相信自从手机入侵互联网后,很多人都遇到了这个我问题,根据经纬度获取附近的商家和相差的距离。而对于距离的计算,我之前写过一篇文章《》,已经提到了做法。而如今天要讲解的是,从MySQL数据源上就要解决问题。因为查询附近数据你总不能拿出来程序一条条比对,而是应该数据上处理,下面先来看看一个查询距离的SQL。
SELECT
store_id,lng,lat, ROUND(6378.138*2*ASIN(SQRT(POW(SIN((22.299439*PI()/180-lat*PI()/180)/2),2)+COS(22.299439*PI()/180)*COS(lat*PI()/180)*POW(SIN((114.173881*PI()/180-lng*PI()/180)/2),2)))*1000) AS juli
FROM
store_info
ORDER BY juli ASC
这个SQL语句就可以获得,某个位置和数据中的信息相差的米数。需要注意的参数如下,请自行更改数值和字段。
第一点经纬度:lng1 lat1
第二点经纬度:lng2 lat2
而这个我们就获取到了相差的米数,那么我们再来计算距离就方便多了。只要利用到HAVING~~
SELECT
store_id,lng,lat, ROUND(6378.138*2*ASIN(SQRT(POW(SIN((22.299439*PI()/180-lat*PI()/180)/2),2)+COS(22.299439*PI()/180)*COS(lat*PI()/180)*POW(SIN((114.173881*PI()/180-lng*PI()/180)/2),2)))*1000) AS juli
FROM
store_info
HAVEING juli < 1000
ORDER BY juli ASC
这个就能查出附近1公里以内的数据了,而且还能从近到远的排序。是不是就方便啦。