1. 程式人生 > >騰訊地圖和百度地圖的相互轉換

騰訊地圖和百度地圖的相互轉換

關於百度和騰訊地圖座標轉換的問題,網上大多給的是JS實現的,而JS又是非同步實現的,無法返回值,在有些應用場景下不好使用,這裡我從騰訊論壇上找到了一個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);
}