背景:在作一個關於地理位置字段時,初始位置使用百度地圖獲取時失敗,獲取的位置信息不許確,奈何產品說友商好使的啊,F12看後是採用的高德,因此在這採用高德地圖獲取初始位置,其餘的仍是用百度地圖web
//獲取當前位置 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; }
/* * 高德座標轉百度(傳入經度、緯度),獲得百度的經緯度 * @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獲取地址 }
/* * 參數爲百度的經緯度 */ 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中來使用 }); }