计算地图经纬度之间两点之间的距离
- 4529
- PHP
- 1
- super_dodo
- 2014/06/11
在一些运用中,尤其是手机app的运用中,常常会用到附近这个功能或者就需要显示和计算当前的位置距离目标商家或者某个特定地点之间的距离。所以在得知两者之间的经纬度的时候。需要计算两者的距离。有多种实现方法,这里先介绍php的计算实现方法。
//求两者经纬度之间的距离 function getDistance($lat1,$lng1,$lat2,$lng2){ //将角度转为狐度 $radLat1 = deg2rad($lat1);//deg2rad()函数将角度转换为弧度 $radLat2 = deg2rad($lat2); $radLng1 = deg2rad($lng1); $radLng2 = deg2rad($lng2); $a = $radLat1 - $radLat2; $b = $radLng1 - $radLng2; $s = 2*asin(sqrt(pow(sin($a/2),2)+cos($radLat1)*cos($radLat2)*pow(sin($b/2),2)))*6378.137*1000; return round($s); } //示例 //102.727775,25.093923 ---龙泉路财经大学 //102.728493,25.019685 ----昆明火车站 //102.936038,25.10086 ----长水机场 //102.774774,24.962569 ----星耀路 $lat1 = 25.019685; //昆明火车站纬度 $lng1 = 102.728493; //昆明火车站经度 $lat2 = 25.10086; //长水机场纬度 $lng2 = 102.936038; //长水机场经度 $long = $this->getDistance($lat1,$lng1,$lat2,$lng2); //昆明火车站到长水机场得到计算的结果为 22.796 //百度地图上量出来的为22.8km //基本吻合 ---见下图
在网上有看到经纬度是和我的相反的传入参数。在一些情况是可行的。我多测试之后觉得在百度地图的情况下,我这个方法准确度相对高一些。各位有高招的话。也可以告诉我。我再改进。
方法二的话。利用数据库的方式。在数据库里面建立一个函数function ,此方法尚未验证,且mysql的版本也不一定很友好,仅供参考。
BEGIN #Routine body goes here... set @num=ROUND((2 * 6378.137* ASIN(SQRT(POW(SIN(PI()*(lat1-lat2)/360), 2)+COS(PI()*lat1/180)* COS(lat2*PI()/180) * POW(SIN(PI()*(lng1-lng2)/360), 2)))),1); RETURN @num; END //计算的时候sql $sql="SELECT id,lat,lng,get_distance($ulng,$ulat,lng,lat) as distance FROM company;
上士闻道,勤能行之;中士闻道,若存若亡;下士闻道,大笑之。
相关阅读
- 通过Google API客户端访问Google Play帐户报告PHP库
- PHP执行文件的压缩和解压缩方法
- 消息中间件MQ与RabbitMQ面试题
- 如何搭建一个拖垮公司的技术架构?
- Yii2中ElasticSearch的使用示例
热门文章
- 通过Google API客户端访问Google Play帐户报告PHP库
- PHP执行文件的压缩和解压缩方法
- 消息中间件MQ与RabbitMQ面试题
- 如何搭建一个拖垮公司的技术架构?
- Yii2中ElasticSearch的使用示例
最新文章
- 通过Google API客户端访问Google Play帐户报告PHP库
- PHP执行文件的压缩和解压缩方法
- 消息中间件MQ与RabbitMQ面试题
- 如何搭建一个拖垮公司的技术架构?
- Yii2中ElasticSearch的使用示例