mysql 两点距离_MySQL计算两点距离函数st_distance
最近在做基于GPS定位的业务,要求根据当前位置点,计算距离该点最近的某个位置(如根据当前位置,计算距离最近充电桩位置)。搜索后,发现MySQL提供了一个计算距离的函数st_distance ,具体的使用如下。st_distance 函数st_distance 函数是从mysql5.6.1才加入的。举例1,如下:SET@g1=POINT(1,1),@g2=POINT(2,2);selec...
最近在做基于GPS定位的业务,要求根据当前位置点,计算距离该点最近的某个位置(如根据当前位置,计算距离最近充电桩位置)。搜索后,发现MySQL提供了一个计算距离的函数st_distance ,具体的使用如下。
st_distance 函数
st_distance 函数是从mysql5.6.1才加入的。
举例1,如下:SET @g1 = POINT(1,1), @g2 = POINT(2,2);
select st_distance (@g1, @g2);
输出结果:1.4142135623730951
另外,st_distance 函数计算结果的单位是度,需要乘111195(地球半径6371000*PI/180)将值转化为米。
举例2,如下:SELECT st_distance (point (1, 1),point(2,2) ) * 111195
输出结果(单位:米):157253.47706807632
当然,我们也可以自定义距离计算函数:CREATE FUNCTION slc (
lat1 DOUBLE,
lon1 DOUBLE,
lat2 DOUBLE,
lon2 DOUBLE
) RETURNS DOUBLE RETURN 6371 * acos(
cos(radians(lat1)) * cos(radians(lat2)) * cos(
radians(lon2) - radians(lon1)
) + sin(radians(lat1)) * sin(radians(lat2))
);
举例3,如下:SELECT slc(1,1,2,2) from DUAL
输出结果(km):157.22543203804852
应用场景:
假设我当时的坐标:117.069,35.86 需要查询我附近50KM内服务区,并按照距离由近及远排列SELECT
s.id,s.name,s.lng,s.lat,
(st_distance (point (lng, lat),point(117.069,35.86) ) *111195) AS distance
FROM
road_servicearea s
HAVING distance<50
ORDER BY distanc
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐



所有评论(0)