在做附近的人,找了一些算法,发现一个貌似挺厉害的,是这么说的
***************************************************************************
接下来推出一个原创计算方法,查询速度是mysql空间数据库算法的2倍
$lng是你的经度,$lat是你的纬度
SELECT lng,lat,
(POWER(MOD(ABS(lng – $lng),360),2) + POWER(ABS(lat – $lat),2)) AS distance
FROM `user_location`
ORDER BY distance LIMIT 100
经测试,在100万数据中取前100条数据只需2.5秒左右。
****************************************************************************
本人也试了试,确实可以,但是就是不理解这是什么算法,以及算出来的distance 是个什么东西,求精通这方面的高手能指点
***************************************************************************
接下来推出一个原创计算方法,查询速度是mysql空间数据库算法的2倍
$lng是你的经度,$lat是你的纬度
SELECT lng,lat,
(POWER(MOD(ABS(lng – $lng),360),2) + POWER(ABS(lat – $lat),2)) AS distance
FROM `user_location`
ORDER BY distance LIMIT 100
经测试,在100万数据中取前100条数据只需2.5秒左右。
****************************************************************************
本人也试了试,确实可以,但是就是不理解这是什么算法,以及算出来的distance 是个什么东西,求精通这方面的高手能指点
解决方案
35
POWER(X,Y)
返回X的Y次幂
ABS(X)
取绝对值
MOD(N,M)
返回N除以M后的余数
POWER(MOD(ABS(lng – $lng),360),2) + POWER(ABS(lat – $lat),2)
其实就是一个三角函数。
计算出了两点之间的距离的平方。
返回X的Y次幂
ABS(X)
取绝对值
MOD(N,M)
返回N除以M后的余数
POWER(MOD(ABS(lng – $lng),360),2) + POWER(ABS(lat – $lat),2)
其实就是一个三角函数。
计算出了两点之间的距离的平方。
5
直角三角形
c平方 = a平方 + b平方
c平方 = a平方 + b平方