网站首页mysql

mysql根据两个经纬度坐标返回距离函数

发布时间:2017-05-15 01:20:40编辑:slayer.hover阅读(4300)

    一、导入mysql存储过程definer[distance]

    DROP FUNCTION IF EXISTS `distance`;
    
    DELIMITER ;;
    CREATE DEFINER=`root`@`localhost` 
    FUNCTION `distance`(`lat1` float, `lng1` float, `lat2` float, `lng2` float) 
    RETURNS float    NO SQL
    BEGIN
    set @num=2 * 6378.137* ASIN(SQRT(POW(SIN(PI() * (lat1-lat2)/ 360), 2) 
            + COS(PI() * lat1 / 180)* COS(lat2* PI() / 180) 
        * POW(SIN(PI() * (lng1-lng2) / 360), 2)));
     RETURN @num;
    END
    ;;
    DELIMITER ;


    二、在sql中直接使用:distance(lat1,lng1,   lat2,lng2)

    获取当前位置坐标,如:[113.673151, 34.821403],  代入SQL,与库里的坐标进行计算:

    SELECT round(DISTANCE(34.821403,113.673151,   a.lat,a.lng), 4) as dist 
    FROM  `address`  a 
    WHERE a.lat>0 AND a.lng>0   
    LIMIT 1;


    dist       

    7.1397(默认单位:公里)

评论