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