MySql计算经纬度是否在某个范围内

CREATE DEFINER=`root`@`%` FUNCTION `With_in`( 
 to_long  varchar(255),
 to_lat varchar(255) ,
distance varchar(255),
coefficient int(1),
distRange longtext 
) RETURNS int(1)
    DETERMINISTIC
BEGIN 
-- DECLARE result varchar(255); 
DECLARE result INT(1) DEFAULT 0;
DECLARE distRange_s    varchar(255) ; -- 子坐标点
DECLARE DISTRANGE_POINT_lat   varchar(255) ; -- 子坐标点纬度
DECLARE DISTRANGE_POINT_long    varchar(255) ; -- 子坐标点经度
DECLARE distance_point INT DEFAULT 0 ; -- 坐标点点的距离
DECLARE distance_norm INT DEFAULT 0  ; -- 判断距离
set distance_norm=distance*coefficient; -- 获取最大配送距离的倍数
SET distRange_s = SUBSTRING_INDEX(distRange,'|',1);#获得
WHILE distRange_s != SUBSTRING_INDEX(distRange,'|',2) -- or result=1 --  以此类推
DO
 set  DISTRANGE_POINT_long=SUBSTRING_INDEX(distRange_s,',',1);# 获取坐标点的经纬度
 set  DISTRANGE_POINT_lat=SUBSTRING_INDEX(distRange_s,',',-1);
 set distance_point=ROUND(6378.138 * 2 * ASIN( SQRT( POW( SIN( ( to_lat* PI() / 180 - DISTRANGE_POINT_lat * PI() / 180 ) / 2),2)
        + COS(to_lat* PI() / 180) * COS(DISTRANGE_POINT_lat * PI() / 180) * POW( SIN((to_long* PI() / 180 - DISTRANGE_POINT_long * PI() / 180) / 2), 2))
        ) * 1000
        );
-- set result=distance_point;
SET distRange = RIGHT(distRange,LENGTH(distRange)-LENGTH(distRange_s)-1);
SET distRange_s = SUBSTRING_INDEX(distRange,'|',1);#= 2 以此类推            
-- 判断是否超过配送最大距离 
IF (distance_point < distance_norm )
THEN 
SET result =1;
set distRange='';
set distRange_s='';
END IF; 
END WHILE;
RETURN result; 
End

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值