mysql计算两点之间距离函数
时间: 2023-08-19 12:14:00 浏览: 108
你可以在 MySQL 中自定义函数来计算两点之间的距离,这样可以方便地在查询中使用。以下是一个基于 Haversine 公式的 MySQL 自定义函数:
DELIMITER $$
CREATE FUNCTION `distance`(lat1 FLOAT, lon1 FLOAT, lat2 FLOAT, lon2 FLOAT)
RETURNS FLOAT
DETERMINISTIC
BEGIN
DECLARE R INT DEFAULT 6371;
DECLARE dLat FLOAT DEFAULT RADIANS(lat2 - lat1);
DECLARE dLon FLOAT DEFAULT RADIANS(lon2 - lon1);
DECLARE a FLOAT;
DECLARE c FLOAT;
DECLARE d FLOAT;
SET a = SIN(dLat/2) * SIN(dLat/2) + COS(RADIANS(lat1)) * COS(RADIANS(lat2)) * SIN(dLon/2) * SIN(dLon/2);
SET c = 2 * ATAN2(SQRT(a), SQRT(1-a));
SET d = R * c;
RETURN d;
END$$
DELIMITER ;
该函数接受四个参数,分别是两个经纬度点的纬度和经度,返回值是它们之间的距离,单位为千米(km)。
需要注意的是,由于 MySQL 的限制,自定义函数必须使用 DELIMITER
命令来改变语句结束符,默认为分号(;
),否则会出现语法错误。在 DELIMITER
命令之后,我们定义了一个名为 distance
的函数,它使用了 Haversine 公式来计算两点之间的距离,并将结果返回。在函数体中,我们使用了 DECLARE
命令来定义变量,SET
命令来赋值,RETURN
命令来返回函数结果。最后,我们使用 DELIMITER
命令将语句结束符改回分号。
相关推荐
















