mysql 计算经纬度的距离

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)
    DETERMINISTIC
BEGIN
 -- cur_lat:当前纬度
 -- cur_lng:当前经度
 -- job_lat:工作的纬度
  -- job_lng:工作的经度

    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-11-15 22:14  ziyi_ang  阅读(454)  评论(0编辑  收藏  举报

导航