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  阅读(826)  评论(0编辑  收藏  举报