插件窝 干货文章 百度地图和腾讯地图坐标相互转换

百度地图和腾讯地图坐标相互转换

地图 百度地图 腾讯地图 3272    来源:插件窝    2019-08-22

百度地图和腾讯地图的坐标算法是不一样的,有的项目需要对接不同的系统可能就会遇到两个系统分别遇到用了不同的地图插件,那么如何做到坐标同步,下面封装了两个坐标系相互转换的函数:

/**
* 中国正常GCJ02坐标---->百度地图BD09坐标
* 腾讯地图用的也是GCJ02坐标
* @param double $lat 纬度
* @param double $lng 经度
*/
function Convert_GCJ02_To_BD09($lng,$lat){
   $x_pi = 3.14159265358979324 * 3000.0 / 180.0;
   $x = $lng;
   $y = $lat;
   $z =sqrt($x * $x + $y * $y) + 0.00002 * sin($y * $x_pi);
   $theta = atan2($y, $x) + 0.000003 * cos($x * $x_pi);
   $lng = $z * cos($theta) + 0.0065;
   $lat = $z * sin($theta) + 0.006;
   return array('lng'=>$lng,'lat'=>$lat);
}

/**
* 百度地图BD09坐标---->中国正常GCJ02坐标
* 腾讯地图用的也是GCJ02坐标
* @param double $lat 纬度
* @param double $lng 经度
* @return array();
*/
function Convert_BD09_To_GCJ02($lng,$lat){
   $x_pi = 3.14159265358979324 * 3000.0 / 180.0;
   $x = $lng - 0.0065;
   $y = $lat - 0.006;
   $z = sqrt($x * $x + $y * $y) - 0.00002 * sin($y * $x_pi);
   $theta = atan2($y, $x) - 0.000003 * cos($x * $x_pi);
   $lng = $z * cos($theta);
   $lat = $z * sin($theta);
   return ['lng'=>$lng,'lat'=>$lat];
}