利用SQL计算两个地理坐标(经纬度)之间的地表距离
时间: 2023-11-09 10:07:58 浏览: 82
可以使用以下SQL查询语句来计算两个地理坐标之间的地表距离:
```sql
SELECT
111.045 * DEGREES(ACOS(COS(RADIANS(lat1)) * COS(RADIANS(lat2)) * COS(RADIANS(lng2) - RADIANS(lng1)) + SIN(RADIANS(lat1)) * SIN(RADIANS(lat2))))
AS distance_in_km
FROM
locations
WHERE
location_id = 1;
```
其中,`lat1`和`lng1`为第一个地理坐标的纬度和经度,`lat2`和`lng2`为第二个地理坐标的纬度和经度。`locations`是存储地理坐标信息的数据表,`location_id`为要查询的地理坐标的ID。
该查询语句会返回两个地理坐标之间的地表距离,单位为公里。
相关问题
postgresql ST_Dinstince 计算两个经纬度的距离
在 PostgreSQL 中可以使用 PostGIS 扩展来计算两个经纬度之间的距离。具体可以使用 ST_Distance 函数,示例如下:
```sql
SELECT ST_Distance(
'POINT(116.404, 39.915)'::geography,
'POINT(121.4737, 31.2304)'::geography
) / 1000 as distance_in_km;
```
其中 `POINT(lon, lat)` 是一个地理位置坐标,使用 `::geography` 可以将其转换为地理坐标。ST_Distance 函数返回的结果单位是米,除以 1000 可以得到千米单位的距离。
需要注意的是,使用 PostGIS 扩展前需要先安装和启用该扩展。可以使用以下命令进行安装和启用:
```sql
CREATE EXTENSION postgis;
CREATE EXTENSION postgis_topology;
```
执行以上命令后,PostGIS 扩展就会被安装并启用。
MySQL计算两个经纬度距离并且排序
计算两个经纬度之间的距离可以使用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`表示降序。
注意:需要将经纬度值转换为弧度进行计算。
相关推荐
![txt](https://img-home.csdnimg.cn/images/20210720083642.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)