1. 程式人生 > >百度地圖和高德地圖結合在web中的使用(二)

百度地圖和高德地圖結合在web中的使用(二)

百度地圖在web中的使用(二)

背景:在做一個關於地理位置欄位時,初始位置使用百度地圖獲取時失敗,獲取的位置資訊不準確,奈何產品說友商好使的啊,F12看後是採用的高德,所以在這採用高德地圖獲取初始位置,其他的還是用百度地圖


  1. 註冊高德,建立例項,獲取key值
  2. 引入js
  3. 高德地圖獲取獲取當前位置:
//獲取當前位置
function getCurrentLocation(){
    var gdmap, geolocation;
    //載入地圖,呼叫瀏覽器定位服務
    gdmap = new AMap.Map('');   //建立例項(如果需要地圖頁面,引數不為空,引數為div的id值)
    gdmap.plugin('AMap.Geolocation', function() {
        geolocation = new AMap.Geolocation({
            enableHighAccuracy: true,//是否使用高精度定位,預設:true
            timeout: 10000,          //超過10秒後停止定位,預設:無窮大
        });
        gdmap.addControl(geolocation);
        geolocation.getCurrentPosition();
        AMap.event.addListener(geolocation, 'complete', onComplete);//返回定位資訊
        AMap.event.addListener(geolocation, 'error', onError);      //返回定位出錯資訊
    });
}
/*
 * 解析位置結果,得到高德的經緯度地址
 */
function onComplete(data){
    var gdlng = data.position.getLng();
    var gdlat = data.position.getLat();
    bd_encrypt(gdlng, gdlat);
}
//定位出錯
function onError(data){
    window.parent.tipObj.showError('未檢測到您的當前位置,請重新整理後重試',3);
    return false;
}
  1. 高德座標轉百度(傳入經度、緯度)
/*
 * 高德座標轉百度(傳入經度、緯度),得到百度的經緯度
 * @param gdlng  高德經度
 * @param gdlat  高德緯度
 */
function bd_encrypt(gdlng, gdlat){
    var X_PI = Math.PI * 3000.0 / 180.0;
    var x = gdlng, y = gdlat;
    var z = Math.sqrt(x * x + y * y) + 0.00002 * Math.sin(y * X_PI);
    var theta = Math.atan2(y, x) + 0.000003 * Math.cos(x * X_PI);
    var bd_lng = (z * Math.cos(theta) + 0.0065).toFixed(8);
    var bd_lat = (z * Math.sin(theta) + 0.006).toFixed(8);
    getAddressBylnglat(bd_lng, bd_lat);  //自定義方法,通過百度api獲取地址
}
  1. 根據百度經緯度獲取詳細地址
/*
 * 引數為百度的經緯度
 */
function getAddressBylnglat(lng, lat){
    var aId = $("#aId").val();
    point = new BMap.Point(lng, lat);
    var getData = new BMap.Geocoder();  //根據經緯度獲取地址
    getData.getLocation(point, function(rs){
        var pointAddress = rs.addressComponents;
        var address = pointAddress.province+pointAddress.city+pointAddress.district+pointAddress.street+pointAddress.streetNumber;
        var localAddress = address + ','+ '經度:' + lng + '、'+'緯度:'+lat;
        //HACK 儲存當前位置(暴力解決下吧)
        sessionStorage.setItem('currentLocation_'+aId,  localAddress);   //把獲取到的當前位置資訊儲存在sessionStorage中來使用
    });
}