mysql 计算两点之间距离
时间: 2023-06-29 11:19:37 浏览: 56
MySQL 可以通过以下公式计算两点之间的距离:
```
SELECT
ROUND(6378.138 * 2 * ASIN(SQRT(POW(SIN((lat1 * PI() / 180 - lat2 * PI() / 180) / 2), 2) + COS(lat1 * PI() / 180) * COS(lat2 * PI() / 180) * POW(SIN((lng1 * PI() / 180 - lng2 * PI() / 180) / 2), 2))), 2) AS distance
FROM
table_name
WHERE
...
```
其中,`lat1`、`lng1` 和 `lat2`、`lng2` 分别表示两个经纬度点的纬度和经度,`table_name` 是要查询的表名,`...` 是查询条件。
公式中的 `6378.138` 是地球半径的公里数,可以根据实际需要进行修改。`ASIN` 表示反正弦函数,`SIN` 和 `COS` 表示正弦和余弦函数,`POW` 表示幂函数,`PI` 表示圆周率。`ROUND` 函数用于将计算结果保留两位小数。
需要注意的是,这个公式是基于球体模型的计算,对于近地面的计算结果可能会有一定误差。
相关问题
mysql计算两点之间距离函数
你可以在 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` 命令将语句结束符改回分号。
mysql计算两个坐标经纬度之间的距离
可以使用MySQL内置的地理空间函数ST_Distance_Sphere来计算两个经纬度坐标之间的距离,示例如下:
假设我们有一个名为location的表,其中包含id、longitude和latitude字段,分别表示地点的唯一标识、经度和纬度。
首先,需要为location表的longitude和latitude字段创建一个地理空间索引,命令如下:
```
ALTER TABLE location ADD SPATIAL INDEX(lonlat);
```
接下来,可以使用ST_Distance_Sphere函数来计算两个经纬度坐标之间的距离,如下所示:
```
SELECT ST_Distance_Sphere(point(longitude1, latitude1), point(longitude2, latitude2)) AS distance
FROM location
WHERE id = 1;
```
其中,point(longitude, latitude)函数用于将经度和纬度转换为地理坐标点,distance表示两个坐标点之间的距离,单位为米。
注意:在MySQL 8.0以前的版本中,建议使用ST_Distance函数来计算两个经纬度坐标之间的距离。