mysql根据当前定位经纬度排序

网上流行的大概有两种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

原文地址:https://www.cnblogs.com/yizhidaozuihou/p/12498317.html