📅  最后修改于: 2023-12-03 15:40:21.009000             🧑  作者: Mango
如果您正在编写一个需要计算地理位置之间距离的程序,那么这个 SQL 查询将会非常有用。
SELECT
id,
(
6371 *
ACOS(
COS(RADIANS(lat1)) *
COS(RADIANS(lat2)) *
COS(RADIANS(long2) - RADIANS(long1)) +
SIN(RADIANS(lat1)) *
SIN(RADIANS(lat2))
)
) AS distance
FROM locations
WHERE id = 1;
lat1
:第一个纬度坐标。long1
:第一个经度坐标。lat2
:第二个纬度坐标。long2
:第二个经度坐标。6371
:地球的半径,单位为千米。ACOS
:反余弦函数。RADIANS
:将角度转换为弧度。COS
:余弦函数。SIN
:正弦函数。AS distance
:将计算结果命名为“distance”。lat1
, long1
, lat2
, long2
替换为您想要计算距离的两个地理位置的纬度和经度坐标。id
替换为您要查询的记录的 ID。注意:这个查询语句计算的是两点之间的直线距离,并不考虑地球表面的曲率。因此,计算结果可能会存在一定的误差。
-- 查询 ID 为 1 的位置与 ID 为 2 的位置之间的距离。
SELECT
id,
(
6371 *
ACOS(
COS(RADIANS(30.1234)) *
COS(RADIANS(31.5678)) *
COS(RADIANS(121.1234) - RADIANS(122.5678)) +
SIN(RADIANS(30.1234)) *
SIN(RADIANS(31.5678))
)
) AS distance
FROM locations
WHERE id = 1;
返回结果:
| id | distance | | --- | ---------- | | 1 | 868.967582 |