计算两点间的距离 根据经纬度

这是一个用于计算两个地点间距离的MySQL函数。通过将经纬度转换为弧度,并应用三角函数,它能够根据给定的坐标返回两点之间的距离。函数首先检查输入是否为空并进行处理,然后进行必要的数学计算,最后返回距离结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

CREATE DEFINER=`qxdjadmin`@`%` FUNCTION `calc_distance`(`lons1` VARCHAR(10),`lats1` VARCHAR(10),`lons2` VARCHAR(10),`lats2` VARCHAR(10)) RETURNS double
BEGIN
    #计算地图距离
    #`lon1` ,`lat1`为列表坐标  lon2`,`lat2为查询坐标
    DECLARE    ew1 double;
      DECLARE ew2 double;
        DECLARE ns1 double;
      DECLARE ns2 double;
    DECLARE     distance double;
        DECLARE DEF_PI180 double;
        DECLARE DEF_R double;

    DECLARE    lon1 double;
      DECLARE lat1 double;
        DECLARE lon2 double;
      DECLARE lat2 double;

    set DEF_PI180=0.01745329252;
    set DEF_PI180=0.01745329252;
    set DEF_R=6370693.5;

    IF(lons1=NULL or lons1='') THEN SET lons1='0'; End if;
    IF(lons2=NULL or lons2='') THEN SET lons2='0'; End if;
    IF(lats1=NULL or lats1='') THEN SET lats1='0'; End if;
    IF(lats2=NULL or lats2='') THEN SET lats2='0'; End if;

    set lon1=cast(lons1 as decimal(10,6));
    set lat1=cast(lats1 as decimal(10,6));
    set lon2=cast(lons2 as decimal(10,6));
    set lat2=cast(lats2 as decimal(10,6));


    SET distance=0;

    SET    ew1 = lon1 * DEF_PI180;
    SET    ns1 = lat1 * DEF_PI180;
    SET ew2 = lon2 * DEF_PI180;        
    SET    ns2 = lat2 * DEF_PI180;

    SET    distance =SIN(ns1) * SIN(ns2) + COS(ns1) * COS(ns2) * COS(ew1 - ew2);
    IF(distance>1.0) THEN SET distance=1.0; End if;
    IF (distance<-1.0) THEN SET distance =-1.0; End if;
    SET    distance =round(ABS(DEF_R * ACOS(distance)+0.5),0);

    RETURN  distance;
END

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值