MySQL之根据经纬度计算距离

 

可以在MySQL层面使用自定义计算函数来使用

CREATE DEFINER=`xxx`@`%` FUNCTION `get_distance`(
lat1 float,lon1 float,lat2 float,lon2 float) RETURNS float
    SQL SECURITY INVOKER
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

 

当然,MySQL 5.7 引入了 ST_Distance_Sphere, 这是一个计算两点之间距离的原生函数 (在地球上).

使用方式:

select ST_Distance_Sphere(
    point(-87.6770458, 41.9631174),
    point(-73.9898293, 40.7628267)
)     
这使我们得到 1148978.6738241839,以米为单位 # 注意: 注意:point 方法的参数首先是经度,然后是纬度;这是一个常见的陷阱!

 

更多使用参考:

  • https://learnku.com/laravel/t/40975

 

posted @ 2023-03-10 09:59  X-Wolf  阅读(1333)  评论(0)    收藏  举报
相关博文:
阅读排行:
· 从硬盘爆满到 GitHub 封号,一位前端开发者的开源历险记
· 微软又一自动化开源王炸,Selenium 慌了!
· 糊涂啊!这个需求居然没想到用时间轮来解决。
· 微服务的10大问题
· 性能优化:两条SQL索引优化,CPU占用率从40%降至25%
历史上的今天:
2021-03-10 PHP编译扩展
2020-03-10 Lnmp编译安装(2020)
 
点击右上角即可分享
微信分享提示