跳到主要内容

百度地图(BD-09)和腾讯地图(GCJ-02)坐标系转换(PHP版)

· 阅读需 3 分钟
lzw.

简单介绍一下常见的地理经纬度坐标系:

WGS-84坐标系:

是国际标准坐标系,GPS坐标(Google Earth使用、或者GPS模块)。

GCJ-02坐标系:

火星坐标系,GCJ-02是由中国国家测绘局制订的地理信息系统的坐标系统。它是一种对经纬度数据的加密算法,即加入随机的偏差。国内出版的各种地图系统(包括电子形式),出于国家安全考虑,必须至少采用GCJ-02对地理位置进行首次加密。国内腾讯地图和高德地图都采用了GCJ-02火星坐标系。

BD-09坐标系:

百度坐标系,也就是在GCJ-02的基础上,进行了BD-09二次加密措施生成的一种坐标系。

GCJ-02(火星,腾讯) 坐标和BD-09(百度) 坐标相互转换的函数PHP版本:

 /*
中国正常GCJ02坐标---->百度地图BD09坐标
腾讯地图用的也是GCJ02坐标
@param double $lat 纬度
@param double $lng 经度
*/
function Convert_GCJ02_To_BD09($lat,$lng){
$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($lat,$lng){
$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 array('lng'=>$lng,'lat'=>$lat);
}