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
MySql计算经纬度是否在某个范围内
最新推荐文章于 2024-07-26 03:50:25 发布