计算当前位置坐标距离各个地点的距离信息,需要用到存储函数,废话不多说直接上代码。
存储过程:
CREATE FUNCTION fun_get_coords_distance (
a_lat DECIMAL (14, 8),
a_lng DECIMAL (14, 8),
b_lat DECIMAL (14, 8),
b_lng DECIMAL (14, 8)
)RETURNS DECIMAL (24, 8) DETERMINISTIC
BEGIN
DECLARE result DECIMAL (24, 8);
SELECT
ROUND(
6378.138 * 2 * ASIN(
SQRT(
POW(
SIN(
(
a_lat * PI() / 180 - b_lat * PI() / 180
) / 2
),
2
) + COS(a_lat * PI() / 180) * COS(b_lat * PI() / 180) * POW(
SIN(
(
a_lng * PI() / 180 - b_lng * PI() / 180
) / 2
),
2
)
)
) * 1000
) INTO result;
RETURN result;
END
存储函数建好之后进行查询,需要将没有坐标的距离没有的放在最后面
SELECT
k.TEXT,
fun_get_coords_distance ( 40, 123, k.LAT, k.LNG ) AS distance
FROM
表 k
ORDER BY
distance is null,distance ASC