在实际开发场景中我们经常会碰到类似美团饿了么的根据距离推荐商家的业务,我们可以直接使用mysql自带的函数来计算距离并排序

比如我有商家表如下所示

CREATE TABLE `t_store` (`id` int NOT NULL AUTO_INCREMENT COMMENT 'id',`store_name` varchar(255) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '商户名称',`longitude` decimal(20,6) DEFAULT NULL COMMENT '经度',`latitude` decimal(20,6) DEFAULT NULL COMMENT '纬度',PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;

我们想根据用户的经纬度来计算与商家距离并保存为distance字段,然后根据此字段排序

因为地球并不是一个规则的球体,所以此方法只是大致的求出两点间距离

代码:

SELECT*,ROUND(6378.138 * 2 * ASIN(SQRT(POW(SIN((37.921289 * PI()/ 180-latitude * PI()/ 180 )/ 2 ),2 )+ COS( 37.921289 * PI()/ 180 )* COS( latitude * PI()/ 180 )* POW(SIN((112.648139 * PI()/ 180-longitude * PI()/ 180 )/ 2 ),2 )))* 1000 ) AS distance
FROMt_store
ORDER BYdistance ASC

查询结果如下:

单位为m,如果想变为km的话可以将SQL语句中的 *1000去掉

mysql根据经纬度计算距离并排序相关推荐

  1. php 经纬度 距离排序,php mysql 根据经纬度计算距离和排序

    #1.两点距离(1.4142135623730951) select st_distance(point(0,0),point(1,1)); select st_distance(point (120 ...

  2. mysql根据经纬度计算距离

    1:定义存储函数 begin declare d double;     declare radius int;     set radius = 6378140; #假设地球为正球形,直径为6378 ...

  3. mysql数据库根据经纬度计算距离,获取离我最近的地点列表,并排序。附近的人,附近商店等功能,一个sql就搞定

    mysql数据库根据经纬度计算距离,获取离我最近的地点列表,并排序 附近的人,附近商家等功能,顺序显示顺序是由近到远的,便利用户查看和判断,sql实现如下. StringBuilder sb=new ...

  4. django 按经纬度计算距离排序

    django 按经纬度计算距离排序 需求: 实现离用户距离最近的店铺排序 公式: 公式解释如下: Lung1 Lat1表示A点经纬度, Lung2 Lat2表示B点经纬度: a=Lat1–Lat2 为 ...

  5. mysql,php和js根据经纬度计算距离

    根据经纬度计算距离公式 图片来自互联网 对上面的公式解释如下: Lung1 Lat1表示A点经纬度, Lung2 Lat2表示B点经纬度: a=Lat1 – Lat2 为两点纬度之差 b=Lung1 ...

  6. php mysql 经纬度_mysql,php和js根据经纬度计算距离

    根据经纬度计算距离公式 图片来自互联网 对上面的公式解释如下: Lung1 Lat1表示A点经纬度, Lung2 Lat2表示B点经纬度: a=Lat1 – Lat2 为两点纬度之差 b=Lung1 ...

  7. 根据两点间的经纬度计算距离

    /** * @desc 根据两点间的经纬度计算距离 * @param float $lat 纬度值 * @param float $lng 经度值 */ function getDistance($l ...

  8. 百度地图经纬度计算距离(Java)

    百度地图Java经纬度计算距离 阅读百度地图Web服务api文档 Maven依赖 百度地图经纬度工具类 阅读百度地图Web服务api文档 Maven依赖 <!--baidu--><d ...

  9. 根据两点经纬度计算距离

    根据两点经纬度计算距离 这些经纬线是怎样定出来的呢?地球是在不停地绕地轴旋转(地轴是一根通过地球南北两极和地球中心的 假想线),在地球中腰画一个与地轴垂直的大圆圈,使圈上的每一点都和南北两极的距离相等 ...

  10. 经纬度计算距离的公式

    经纬度计算距离的公式是: 设点A(lat1, lon1),点B(lat2, lon2) d = R * arccos(sin(lat1) * sin(lat2) + cos(lat1) * cos(l ...

最新文章

  1. 设计模式-简单工厂模式
  2. Serializable And Parcelable
  3. 简单的js文本框提示语
  4. JSP生成验证码源程序
  5. kettle于javascript步骤错误处理
  6. 外设驱动库开发笔记12:TSEV01CL55红外温度传感器驱动
  7. 坐标不显示_Simpack不显示坐标轴方向的解决方法
  8. 计算机应用技术自我分析,计算机应用*个人自我鉴定
  9. 《精通javascript》几个简单的函数(二)
  10. 2018蓝桥C++B:煤球数目;生日蜡烛(枚举年龄和枚举次数)
  11. 基于矩阵分解的隐因子模型
  12. RFC 5961翻译
  13. 拓端tecdat|R语言股市可视化相关矩阵:最小生成树
  14. 地图比例尺与空间分辨率之间的关系_地图比例尺,分辨率,dpi之间的关系
  15. 机器视觉软件入门(2)
  16. 小程序自定义下拉刷新
  17. ffmpeg学习日记5-使用ffmpeg进行h264解码
  18. 写论文时遇到的问题及解决办法
  19. OS X键盘快捷键Cheatsheet
  20. 回音消除、噪音抑制的原理

热门文章

  1. 索尼z3c d5833港版救砖强刷说明
  2. 华大MCU的IAP升级
  3. 新能源汽车前景广袤但痛点多多,大圆柱电池能否提供最优解?
  4. matlab imshow伪彩色,实验7:彩色图像及伪彩色处理
  5. HTML---鼠标悬停导航栏变颜色
  6. Vbs脚本编程简明教程
  7. Scrapy 中文手册 0.25 文档
  8. python识别手写文字_深度学习---手写字体识别程序分析(python)
  9. w10怎么改mysql用户名_win10用户名彻底改为英文的详细操作步骤
  10. AIDL解析(一):AIDL原理解析