按照经纬度计算距离

日常开发中,特别是做微信项目时,经常会遇到根据用户地理位置来展示附近商家的功能,通常解决这种问题的思路是,后台设置商家的经纬度,然后再根据前台传的经纬度进行计算,具体经纬度转换以及前台如何获取,本篇不做详细介绍,可以使用php类方法计算,也可以通过sql语句来计算,在此,主要是介绍利用MySQL创建一个函数,然后在sql语句中使用

创建函数:lat_lng_distance(),单位:km,并已截取小数点2位

 CREATE FUNCTION `lat_lng_distance` (lat1 FLOAT, lon1 FLOAT, lat2 FLOAT, lon2 FLOAT)
RETURNS FLOAT
DETERMINISTIC
BEGIN
RETURN ROUND(6378.138 * 2 * ASIN(SQRT(POW(SIN((lat1 * PI() / 180 - lat2 * PI() / 180) / 2), 2)
+ COS(lat1 * PI() / 180) * COS(lat2 * PI() / 180)
* POW(SIN(( lon1 * PI() / 180 - lon2 * PI() / 180 ) / 2),2))),2);
END

创建完成,然后再在sql语句中调用即可,下面是截图

1 $shops = Db::name('user')
->field('id,shop_name,shop_address,avatar,average_consume,discount,lat_lng_distance('.$lat.','.$lon.',lat,lon) as distance,get_shop_avg_star(id) as star')
->where($where)
->page($page,10)
->order('distance asc')
->select()->toArray();

其中,$lat,$lon是前台传过来的参数;

最新文章

  1. TP5验证规则使用
  2. Ruby-调用windows窗体
  3. 在windows 环境下对于 git 服务器的安装和使用
  4. 手机端js事件支持(event)
  5. [UESTC1059]秋实大哥与小朋友(线段树, 离散化)
  6. saltstack远程操作WINDOWS的POWERSHELL脚本
  7. MongoDB用户
  8. Linux命令--su与sudo
  9. python中的类属性和实例属性
  10. re模块和正则表达式
  11. C++中虚拟继承
  12. Angular动态创建组件之Portals
  13. Virtual Hosts
  14. Logback中使用TurboFilter实现日志级别等内容的动态修改
  15. 小程序开发-Step1
  16. Oracle课程档案,第十天
  17. springboot @RequestBody使用JsonSerialize与 JsonDeserialize自定义转参数,处理Date日期格式
  18. Custom Grid Columns - FireMonkey Guide
  19. gitlab ssh_key
  20. Photoshop 基础五 橡皮擦工具

热门文章

  1. JS 时间格式为/Date(1332919782070)/ 转化为正常的格式
  2. maven settings.xml linux
  3. NET Core 2.0 自定义
  4. D、Homework of PE 容斥原理
  5. Kaggle八门神器(一):竞赛神器之XGBoost介绍
  6. Linux学习笔记——如何使用echo指令向文件写入内容
  7. c#基础 path 类的各种套路
  8. Flask 学习系列(四)---Jinjia2 模板继承
  9. restframework安装及APIView分析
  10. jQuery toggle 使用