mysql经纬度坐标距离计算
本文章主要解决数据库如果存有经纬度,获取一定距离的记录数
首先我们在mysql建立一个可重复使用的计算两个坐标经纬度的Function
DELIMITER $$
DROP FUNCTION IF EXISTS `MyDistance`$$
CREATE FUNCTION `MyDistance`(lat1 FLOAT, lng1 FLOAT, lat2 FLOAT, lng2 FLOAT)
RETURNS DOUBLE
BEGIN
DECLARE distance DOUBLE;
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)));
RETURN distance;
END$$
DELIMITER ;
接下来,就是运用这个function计算距离了。
为了提高效率,在计算距离时首先通过经度和纬度过滤,然后再通过距离过滤,因为如果计算所有记录的距离毕竟不是很高效的做法。