MySQL计算两个经纬度距离并且排序
时间: 2023-06-12 15:06:25 浏览: 69
计算两个经纬度之间的距离可以使用Haversine公式,具体实现可以如下:
```sql
SELECT *,
6371 * 2 * ASIN(SQRT(POWER(SIN((lat1 - lat2) * PI() / 180 / 2), 2) + COS(lat1 * PI() / 180) * COS(lat2 * PI() / 180) * POWER(SIN((lng1 - lng2) * PI() / 180 / 2), 2))) AS distance
FROM your_table
ORDER BY distance ASC;
```
其中,`lat1`和`lng1`表示第一个经纬度,`lat2`和`lng2`表示第二个经纬度,`your_table`为存储经纬度信息的表名。`distance`为计算出的距离值,单位为千米。
使用`ORDER BY`进行排序,`ASC`表示升序,`DESC`表示降序。
注意:需要将经纬度值转换为弧度进行计算。
相关问题
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函数来计算两个经纬度坐标之间的距离。
MySQL表字段有经纬度 怎么实现按照距离排序
在MySQL中,可以使用空间数据类型和函数来实现按照距离排序的功能。具体的做法是:
1. 在表中创建两个字段用于存储经纬度信息,分别为经度(longitude)和纬度(latitude)。
2. 将这两个字段设置为MySQL的空间数据类型,可以使用点(Point)数据类型来表示经纬度信息。
3. 使用MySQL提供的ST_DISTANCE_SPHERE函数来计算两个经纬度之间的距离,该函数需要传入两个点的经纬度信息。
4. 在查询时,可以使用ORDER BY子句来按照距离排序,同时使用ST_DISTANCE_SPHERE函数来计算距离。
下面是示例代码:
```sql
-- 创建表
CREATE TABLE `location` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`longitude` point NOT NULL,
`latitude` point NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- 插入数据
INSERT INTO `location` (`longitude`, `latitude`) VALUES
(POINT(120.153576, 30.287459), POINT(120.153576, 30.287459)),
(POINT(120.153576, 30.287459), POINT(120.153576, 30.287459)),
(POINT(120.153576, 30.287459), POINT(120.153576, 30.287459));
-- 查询距离最近的数据
SELECT id, ST_DISTANCE_SPHERE(longitude, latitude, POINT(120.153576, 30.287459)) AS distance
FROM location
ORDER BY distance
LIMIT 10;
```
在上面的示例代码中,我们创建了一个名为location的表,其中包含了经度和纬度两个点类型的字段。然后插入了三条数据,并使用ST_DISTANCE_SPHERE计算到指定经纬度的距离,并按照距离排序,最后选择距离最近的10条数据。
需要注意的是,在使用ST_DISTANCE_SPHERE函数时,需要传入两个点的经纬度信息,可以使用POINT函数来创建点类型的数据。另外,需要将经度和纬度字段设置为点类型,才能使用空间函数来计算距离。