我正在使用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