利用Mysql实现经纬度的计算
一、问题产生
最近接到一个需求,在地图上展示指定位置的商铺。我想到的第一解决方案时使用redis的GEO数据类型来解决这个问题,但是后来看了数据库中的数据,发现我们系统里面的商铺并不是很多,所以就想偷个懒,直接用mysql处理。于是百度了一下,还真发现mysql提供了这样的功能。
二、st_distance_sphere函数说明
mysql5.7提供工了st_distance_sphere函数,用来计算球体上两个坐标之间的距离。这个函数的输入参数有三个,st_distance_sphere(g1, g2, [radius])
, g1、g2是位置坐标,是Point类型的对象,可以通过Point函数构造。radius表示半径,不传默认为地球半径6,370,986米。st_distance_sphere计算出来的单位是米(m)
注意:mysql5.7版本才开始支持st_distance_sphere函数,如果你的mysql版本低于5.7,这个函数是无法使用的。
三、使用实例
这里举个例子,查询经度为118.767413
, 纬度为32.041544
附近2000米范围内的所有店铺。
-- POINT(lng,lat)表示将数据库中保存的经度、纬度转换成POINT对象
SELECT
*
FROM
crm_repair_factory
WHERE
ST_Distance_Sphere(POINT(118.767413, 32.041544 ),POINT(lng,lat)) <= 2000
四、总结
Mysql5.7及以上版本,提供了st_distance_sphere函数来方便我们进行经纬度的计算。少量数据的情况下,可以直接使用该种方法进行处理。如果数据量过大,还是建议使用redis的GEO数据类型来进行解决。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 2025年我用 Compose 写了一个 Todo App
· 张高兴的大模型开发实战:(一)使用 Selenium 进行网页爬虫