mysql函数通过经纬度计算亮点距离

mysql 

第一个点的经纬度参数为 :cur_lat、cur_lng;

第二个点的经纬度参数为 :job_lat、job_lng;

 

最后返回为具体的米数。

 

DROP FUNCTION IF EXISTS `getDistance`;

CREATE DEFINER = `root`@`%` FUNCTION `getDistance`(`cur_lat` float(20),`cur_lng` float(20),`job_lat` float(20),`job_lng` float(20))
 RETURNS bigint(20)
BEGIN
    DECLARE earthRadius int unsigned default 6367000;
    DECLARE PI FLOAT unsigned default PI();
    DECLARE calcLongitude,calcLatitude FLOAT default 0;
    DECLARE stepOne,stepTwo FLOAT unsigned default 0;
    DECLARE calculatedDistance FLOAT unsigned default 0;
    
    SET cur_lat=(cur_lat*PI)/180;
    SET cur_lng=(cur_lng*PI)/180;

    SET job_lat=(job_lat*PI)/180;
    SET job_lng=(job_lng*PI)/180;

    SET calcLongitude=job_lng-cur_lng;
    SET calcLatitude=job_lat-cur_lat;

    SET stepOne = pow(sin(calcLatitude / 2), 2) + cos(cur_lat) * cos(cur_lat) * pow(sin(calcLongitude / 2), 2);
    SET stepTwo = 2 * asin(LEAST(1, sqrt(stepOne)));
    SET calculatedDistance = earthRadius * stepTwo;
    RETURN calculatedDistance;
END;

 

posted on 2018-01-13 23:43  ziyi_ang  阅读(236)  评论(0编辑  收藏  举报

导航