地图上计算两点间的距离
首页->学习资料->编程语言->php教程->php技巧 关键词: 发布时间:2017-02-20 07:55:43 浏览次数:1929

单位:千米,传的分别为两个点的经纬度,用百度的坐标,经测试不准,貌似应该转gps坐标才是对的

//获取2点之间的距离
public function GetDistance($lat1, $lng1, $lat2, $lng2){
   define('PI',3.1415926535898);
   define('EARTH_RADIUS',6378.137);
   $radLat1 = $lat1 * (PI / 180);
   $radLat2 = $lat2 * (PI / 180);
   $a = $radLat1 - $radLat2;
   $b = ($lng1 * (PI / 180)) - ($lng2 * (PI / 180));
   $s = 2 * asin(sqrt(pow(sin($a/2),2) + cos($radLat1)*cos($radLat2)*pow(sin($b/2),2)));
   $s = $s * EARTH_RADIUS;
   $s = round($s * 10000) / 10000;
   return $s;
}


下面这个测试是准的,要转gps坐标


/**
* 计算两个坐标之间的距离(千米,两位小数)
* @param float $fP1Lat 起点(纬度)
* @param float $fP1Lon 起点(经度)
* @param float $fP2Lat 终点(纬度)
* @param float $fP2Lon 终点(经度)
* @return int
*/
function distanceBetween($fP1Lat, $fP1Lon, $fP2Lat, $fP2Lon){
   $fEARTH_RADIUS = 6378137;
   //角度换算成弧度
   $fRadLon1 = deg2rad($fP1Lon);
   $fRadLon2 = deg2rad($fP2Lon);
   $fRadLat1 = deg2rad($fP1Lat);
   $fRadLat2 = deg2rad($fP2Lat);
   //计算经纬度的差值
   $fD1 = abs($fRadLat1 - $fRadLat2);
   $fD2 = abs($fRadLon1 - $fRadLon2);
   //距离计算
   $fP = pow(sin($fD1/2), 2) +
       cos($fRadLat1) * cos($fRadLat2) * pow(sin($fD2/2), 2);
   return round(intval($fEARTH_RADIUS * 2 * asin(sqrt($fP)) + 0.5)/1000,2);
}
/**
* 百度坐标系转换成标准GPS坐系
* @param float $lnglat 坐标(如:106.426, 29.553404)
* @return string 转换后的标准GPS值:
*/
function BD09LLtoWGS84($x, $y){ // 经度,纬度
   $arr['x']=$x;
   $arr['y']=$y;
   $Baidu_Server = "http://api.map.baidu.com/ag/coord/convert?from=0&to=4&x={$x}&y={$y}";
   $result = @file_get_contents($Baidu_Server);
   $json = json_decode($result);
   if($json->error == 0){
       $bx = base64_decode($json->x);
       $by = base64_decode($json->y);
       $GPS_x = 2 * $x - $bx;
       $GPS_y = 2 * $y - $by;
       $arr['x']=$GPS_x;
       $arr['y']=$GPS_y;
   }
   return $arr;
}

赞:(0)
踩:(0)
相关文章
phpexcel设置行高及列宽,背景颜色,
单点登录sso原理及php实现方式及de
在php中用curl请求java接口无法获
免费ip地址查询接口
php,java,android, aes加解密-加密
关于百度地图的一些技巧
php中empty,is_null,isset的区别
windows及linux下composer安装教程
一种精妙的数据查询与存储方式
微信扫码登录
热门文章
win7中将文件拷贝到虚拟机linux下
phpexcel设置行高及列宽,背景颜色,
rabbitmq无法启动
intellij idea不显示git push按钮
php7中使用mongodb的aggregate进行
centos7.4 64位下swoole安装及配置
laravel页面静态化的方法
navicate连接mycat报1184错误
单点登录sso原理及php实现方式及de
devops-jenkins容器为pending状态
好评文章
phpexcel设置行高及列宽,背景颜色,
php7中使用mongodb的aggregate进行
intellij idea打开文件所在文件夹
windows下使用MongoDB Compass Com
win7中将文件拷贝到虚拟机linux下
laravel 中悲观锁 & 乐观锁的使用
单点登录sso原理及php实现方式及de
navicate连接mycat报1184错误
rabbitmq无法启动
laravel整合dingo/api方法步骤:jwt
标签
rabbitmq mysql备份 elasticsearch golang swoole
我的项目
【github】www.github.com/hurong241
【码云】gitee.com/hu_rong/projects
【docker hub】hub.docker.com/repositories/hurong241
【packagist】packagist.org/users/hurong241/packages
站点信息
建站时间:2011年
文章数:607篇
浏览数:943478
粤ICP备18028092号-1  微信:hurong241