我的函数存在问题,需要计算给定坐标之间的距离。正如我所看到的,问题出在负值上,我已经没有办法解决这个问题了,所以如果有人可以帮助我,我将非常感激!
DELIMITER $$
CREATE DEFINER=`sfff_user`@`%` FUNCTION `GetUserDistance`(lat VARCHAR (20), lon VARCHAR (20), userLat VARCHAR (20), userLon VARCHAR (20)) RETURNS int(11)
BEGIN
DECLARE distance INT (11);
IF ISNULL(lat) OR ISNULL(lon) OR lat = '' OR lon = '' THEN
RETURN 0;
ELSE
SELECT
3956 * 2 * ASIN(SQRT(POWER(SIN((lat - ABS(userLat)) * PI() / 180 / 2), 2) + COS(lat * PI() / 180) * COS(ABS(userLat) * PI() / 180) * POWER(SIN((lon - userLon) * PI() / 180 / 2), 2)))
INTO
distance;
RETURN distance;
END IF;
END
例如此调用的结果:
select GetUserDistance(44, 21, 44, 21) as distance;
是0没关系
但是看看这个:
select GetUserDistance('-15.4167', '28.2833', '-15.4167', '28.2833') as distance;
是2129,这太疯狂了!
因此,如果您可以看一下,拥有正确的功能会非常好,因为我很想解决这个问题:(
谢谢。