- 转:https://blog.csdn.net/qq_27238185/article/details/80339653
- 经常会有这样的需求,已知用户具体的经纬度,要查询出距离用户最近 X 公里内的商家
下面给出一条SQL语句来解决这个问题
ROUND(6378.138*2*ASIN(SQRT(POW(SIN(($latitude*PI()/180-latitude*PI()/180)/2),2)+COS($latitude*PI()/180)*COS(latitude*PI()/180)*POW(SIN(($longitude*PI()/180-longitude*PI()/180)/2),2)))*1000)
说明:6378.138这个是地球的直径,单位千米. latitude是用户位置的纬度, l a t i t u d e 是 用 户 位 置 的 纬 度 , longitude是用户位置经度.latitude 为商户的纬度字段,longitude为商户的经度字段。上面一段sql计算得出根据用户经纬度计算与商户的距离。
- 完整查询语句如下
select ROUND(6378.138*2*ASIN(SQRT(POW(SIN(($latitude*PI()/180-latitude*PI()/180)/2),2)+COS($latitude*PI()/180)*COS(latitude*PI()/180)*POW(SIN(($longitude*PI()/180-longitude*PI()/180)/2),2)))*1000) AS distance FROM shop having distance <= 5000 order by distance asc