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