mysql计算两点之间距离函数
时间: 2023-08-19 19:14:00 浏览: 91
你可以在 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` 命令将语句结束符改回分号。
阅读全文