表如下
MySQL创建计算距离函数:lat_lng_distance
CREATE FUNCTION `lat_lng_distance` (lat1 FLOAT, lng1 FLOAT, lat2 FLOAT, lng2 FLOAT)
RETURNS FLOAT
DETERMINISTIC
BEGIN
RETURN 6371 * 2 * ASIN(SQRT(
POWER(SIN((lat1 - abs(lat2)) * pi()/180 / 2),
2) + COS(lat1 * pi()/180 ) * COS(abs(lat2) *
pi()/180) * POWER(SIN((lng1 - lng2) *
pi()/180 / 2), 2) ));
END
查询排序SQL:
SELECT NAME
,
ROUND( lat_lng_distance ( 39.980195, 116.368416, lat, lng ), 2 ) AS distance
FROM
bms_shop
ORDER BY
distance ASC
LIMIT 0,20
查询结果:
39.980195, 116.368416为前端输入的经纬度参数,distance单位:KM