Archive for 四月, 2011

mysql经纬度坐标距离计算

四 09 2011 Published by under 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计算距离了。
为了提高效率,在计算距离时首先通过经度和纬度过滤,然后再通过距离过滤,因为如果计算所有记录的距离毕竟不是很高效的做法。

No responses yet