欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程语言 > php >内容正文

php

php计算两个地点的距离

发布时间:2024/1/8 php 49 豆豆
生活随笔 收集整理的这篇文章主要介绍了 php计算两个地点的距离 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

很多朋友做的项目中相信都会出现这样的场景。同样在最近做的项目中也出现了这样的场景,经过查询研究整理出来了两种方法。
第一种:业务逻辑代码实现两地距离(推荐) 这个方法写到公共类中最好

function getPalceDiff( $sLat1,$sLng1,$sLat2,$sLng2 )
{

//首先先把所有的经纬度进行转换成 弧度 php中有deg2red();$sNewLat1 = deg2red( $sLat1 );$sNewLng1 = deg2red( $sLng1 );$sNewLat2 = deg2red( $sLat2 );$sNewLng2 = deg2red( $sLng2 );//再把两个经纬度的差算出来$lat = $sNewLat1 - $sNewLat2;$lng = $sNewLng1 - $sNewLng2;//再进行计算$diff = 2 * asin(sqrt(pow(sin($lat / 2), 2)+cos($sNewLat1) * cos($sNewLat2) * pow(sin($lng / 2), 2))) * 6378.137;return $diff;

}

第二种:sql查询过滤,试想一下如果业务逻辑是要得到当前地点5公里内的所有停车场信息,上面那种方法貌似就不合适了,因为我们需要把所有的停车场都查出来再循环处理查询计算两地差,那么这样的代码逻辑运行起来过去多,如果停车场太多呢。我暂时还没有想到更好的办法,所以就用了数据库查询方法来执行,也希望那个大神,如果有更好的实现逻辑,赐教一下

“select ROUND(6378.1382ASIN(SQRT(POW(SIN(($latitude*PI()/180-latitude*PI()/180)/2),2)+COS($latitude*PI()/180)*COS(latitude*PI()/180)*POW(SIN(($longitude*PI()/180-longitude*PI()/180)/2),2)))*1000) AS distance FROM shop having distance <= 5000 order by distance asc FROM table”

*根据自己的数据库字段名去换里面的字段名 比如latitude 你的是lat

这两种方法根据不同的业务需求,来选择用那种方式来解决,当然如果可以尽量代码来解决这个问题,从而减轻对数据库的压力

总结

以上是生活随笔为你收集整理的php计算两个地点的距离的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。