我正在使用 mysql 来计算接近度,为此我创建了一个名为 distance 的过程,如下所示,但该过程无法正常工作,但 sql 语句正在工作,所以这里有什么区别,因为我猜两者都是 Haversine formulas
但没有给出我正确的结果。我真的don't know wht i am missing in formula one.
我的表的数据结构如下
对于一级方程式
id varchar(100)
userid varchar(100)
username varchar(100)
currLoc point
radius int(10)
对于公式二
id varchar(30)
userid varchar(30)
username varchar(40)
lat float(10,6)
lan float(10,6)
radius varchar(100)
一级方程式: 参考
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)));
公式二: 参考
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 是以公里为单位的半径