WithCoderWithCoderWithCoder

MySQL计算两点距离函数st_distance

    最近在做基于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


欢迎分享交流,转载请注明出处:WithCoder » MySQL计算两点距离函数st_distance