我正在使用mysql来计算邻近度,为此我创建了一个名为distance的过程,如下所示,但该过程不能正常工作,但sql语句正在工作,因此这里有什么区别因为两者都是我猜Haversine formulas
,但没有给我正确的结果。我真的don't know wht i am missing in formula one.
Haversine公式的不同结果
结构如下
式一个
id varchar(100)
userid varchar(100)
username varchar(100)
currLoc point
radius int(10)
对于式2
方程式:reference
sql statement to execute distance function
SELECT userid, username, distance(userstatus.currLoc,
GeomFromText('POINT(23.039574 72.56602)')) AS cdist
FROM userstatus HAVING cdist <= 0.6 ORDER BY cdist LIMIT 10
RETURN 6371 * 2 *
ASIN(SQRT(POWER(SIN(RADIANS(ABS(X(a)) - ABS(X(b)))), 2) +
COS(RADIANS(ABS(X(a)))) * COS(RADIANS(ABS(X(b)))) *
POWER(SIN(RADIANS(Y(a) - Y(b))), 2)));
式2:reference
SELECT *,(((acos(sin((23.039574*pi()/180)) *
sin((lat *pi()/180))+cos((23.039574*pi()/180)) *
cos((lat *pi()/180)) * cos(((72.56602- lon)*pi()/180))))*
180/pi())*60*1.1515*1.609344) as distance
FROM status HAVING distance <= 0.6
这里0.6是在表达的
+1引起了我的注意,好吧,那么我应该怎么使用那么哪个是标准和正确的? – Hunt 2012-02-25 17:58:39
虽然二级方程式是一个有效的Haversine公式吗? – Hunt 2012-02-25 19:28:07