网上流行的大概有两种sql写法,发现两种计算的结果不一样,也就是有一种不是很准确,试了下百度在线api计算结果,发现第二种和百度在线api计算结果一致,应该是最正确的。这里简单的整理下这种。
原文作者: xingguang
原文链接: https://www.tiance.club/post/2178671104.html
用户当前定位经纬度 纬度:$lat (23.100571) ,经度:$lng (113.389937)
SELECT
id,
latitude,
longitude
round((
2 * 6378.137 * ASIN(
SQRT(
POW( SIN( PI()*( $lat- latitude )/ 360 ), 2 )+ COS( PI()* $lat / 180 )* COS( latitude * PI()/ 180 )* POW( SIN( PI()*( $lng- longitude )/ 360 ), 2 )))) * 1000
) AS juli
FROM
table(表名)
ORDER BY
`juli`
这里的计算结果是米为单位,如果想要km为单位的话直接去掉最后面的 "1000",这里我是做了四拾伍入,不保留小数点,直接取整数米,如果只是排序的话建议不加round和1000,提高sql执行效率。
另外还有php版的根据当前定位经纬度排序具体文章地址:
https://www.tiance.club/post/1713014064.html
原文作者: xingguang
原文链接: https://www.tiance.club/post/2178671104.html