關於百度地圖偏移的問題


 

首先看官方是怎么說的

/*
4.3 百度坐標為何有偏移?
國際經緯度坐標標准為WGS-84,國內必須至少使用國測局制定的GCJ-02,對地理位置進行首次加密。百度坐標在此基礎上,進行了BD-09二次加密措施,更加保護了個人隱私。百度對外接口的坐標系並不是GPS采集的真實經緯度,需要通過坐標轉換接口進行轉換。
http://developer.baidu.com/map/question.htm
*/

 

然后看這位怎么說的

 

/*
下面簡單介紹下經緯度坐標偏移問題的解決方法,這個官方說法是因為百度在國家標准的加密算法的基礎上又進行了一次加密導致的,解決方案需要詢問百度。這里有一個百度hi群的群號:1306508,有問題的可以加群里問,不過一般也會被告知這個需要合作伙伴才可以告訴,很郁悶。

  我是發郵件給mapapi@baidu.com才獲得了解決方法,也是通過一個網址,將待轉換的經緯度以url參數的形式傳遞進去,打開的頁面是經過了Base64形式的校正經緯度坐標,實驗了一下還挺准確的。之前在互聯網上查到過一個網址,不過都說已經被百度停止服務了,不過對比了一下和百度給我的網址,發現並沒有停止服務,而是對參數名稱進行了改變。。。具體的網址我就不便多說了(其實是掩耳盜鈴),跟百度溝通應該就可以獲取得到~
http://www.cnblogs.com/funnydavid/archive/2011/03/02/1969244.html
*/

 

最后呀在這里找到答案

http://malagis.com/baidu-maps-api-map-coordinate-conversion.html

 

demo:http://malagis.com/demo/demo-html5-baidumap2.html

 

 

貼上代碼備用

<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="initial-scale=1.0, user-scalable=no" />  
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />  
<title>GIS開發利用html5獲取經緯度並在百度地圖中查看</title>
<!--加載百度 map api-->
<script type="text/javascript" src="http://api.map.baidu.com/api?v=1.5&ak=8827ee39511568ac0705d037d67b2624"></script>  
<script type="text/javascript" src="http://developer.baidu.com/map/jsdemo/demo/convertor.js"></script>
</head>

<body>
<span id="support">將下面的經緯度輸入谷歌地圖:</span>
<div id="show">
緯度:<span id="latitude"></span><br />
經度:<span id="longitude"></span><br />
准確度:<span id="accuracy"></span>
</div>
<div id="map_canvas" style="width:500px; height:500px;"></div>
<script type="text/javascript">
var doc = document,
    latitude = doc.getElementById('latitude'),
    longitude = doc.getElementById('longitude'),
    accuracy = doc.getElementById('accuracy'),
    support = doc.getElementById('support'),
    showDiv = doc.getElementById('show');
var map = new BMap.Map("map_canvas");
function lodeSupport(){
    if(navigator.geolocation){
        support.innerHTML = '將下面的經緯度輸入谷歌地圖(緯度 經度)查看自己位置:';
        showDiv.style.display = 'block';
        navigator.geolocation.getCurrentPosition(updataPosition);
    }else{
        support.innerHTML = '對不起,瀏覽器不支持!';
        showDiv.style.display = 'none';
    }
}
function updataPosition(position){
    var latitudeP = position.coords.latitude,
        longitudeP = position.coords.longitude,
        accuracyP = position.coords.accuracy;
    latitude.innerHTML = latitudeP;
    longitude.innerHTML = longitudeP;
    accuracy.innerHTML = accuracyP;
    //在百度 map中顯示地址
    
    var point = new BMap.Point(longitudeP , latitudeP);  // 創建點坐標  
    map.centerAndZoom(point, 15);// 初始化地圖,設置中心點坐標和地圖級別  
    var marker = new BMap.Marker(point);    
    map.addOverlay(marker); 
    BMap.Convertor.translate(point,0,translateCallback);     //真實經緯度轉成百度坐標
    
}
//坐標轉換完之后的回調函數
function translateCallback(point1){
    var marker1 = new BMap.Marker(point1);
    map.addOverlay(marker1);
    var label = new BMap.Label("轉換后的百度坐標",{offset:new BMap.Size(20,-10)});
    marker1.setLabel(label); //添加百度label
    map.setCenter(point1);
}

window.addEventListener('load', lodeSupport , true);
</script>
</body>
</html>

convertor.js

//2011-7-25
(function(){        //閉包
function load_script(xyUrl, callback){
    var head = document.getElementsByTagName('head')[0];
    var script = document.createElement('script');
    script.type = 'text/javascript';
    script.src = xyUrl;
    //借鑒了jQuery的script跨域方法
    script.onload = script.onreadystatechange = function(){
        if((!this.readyState || this.readyState === "loaded" || this.readyState === "complete")){
            callback && callback();
            // Handle memory leak in IE
            script.onload = script.onreadystatechange = null;
            if ( head && script.parentNode ) {
                head.removeChild( script );
            }
        }
    };
    // Use insertBefore instead of appendChild  to circumvent an IE6 bug.
    head.insertBefore( script, head.firstChild );
}
function translate(point,type,callback){
    var callbackName = 'cbk_' + Math.round(Math.random() * 10000);    //隨機函數名
    var xyUrl = "http://api.map.baidu.com/ag/coord/convert?from="+ type + "&to=4&x=" + point.lng + "&y=" + point.lat + "&callback=BMap.Convertor." + callbackName;
    //動態創建script標簽
    load_script(xyUrl);
    BMap.Convertor[callbackName] = function(xyResult){
        delete BMap.Convertor[callbackName];    //調用完需要刪除改函數
        var point = new BMap.Point(xyResult.x, xyResult.y);
        callback && callback(point);
    }
}

window.BMap = window.BMap || {};
BMap.Convertor = {};
BMap.Convertor.translate = translate;
})();

 

嘿嘿嘿      轉換的地址是這個

 var xyUrl = "http://api.map.baidu.com/ag/coord/convert?from="+ type + "&to=4&x=" + point.lng + "&y=" + point.lat + "&callback=BMap.Convertor." + callbackName;

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM