本文章主要解决数据库如果存有经纬度,获取一定距离的记录数
首先我们在mysql建立一个可重复使用的计算两个坐标经纬度的Function
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | DELIMITER $ DROP FUNCTION IF EXISTS `GetDistance`$ CREATE FUNCTION `GetDistance`(lat1 FLOAT,lng1 FLOAT, lat2 FLOAT,lng2 FLOAT) RETURNS DOUBLE BEGIN DECLARE distance DOUBLE; if ((lat1=0 and lng1=0) or (lat2=0 and lng2=0)) then set distance=99999999.00; else SET distance= 2 * 6378.137* ASIN(SQRT(POW(SIN(PI() * (lat1-lat2) / 360), 2)+COS(PI() * lat1 / 180)* COS(lat2* PI() / 180) * POW(SIN(PI() * (lng1-lng2) / 360), 2))); end if; RETURN distance; END$ DELIMITER ; |
接下来,就是运用这个function计算距离了。 为了提高效率,在计算距离时首先通过经度和纬度过滤,然后再通过距离过滤,因为如果计算所有记录的距离毕竟不是很高效的做法。