百度地圖和高德地圖結合在web中的使用(二)
阿新 • • 發佈:2018-11-19
百度地圖在web中的使用(二)
背景:在做一個關於地理位置欄位時,初始位置使用百度地圖獲取時失敗,獲取的位置資訊不準確,奈何產品說友商好使的啊,F12看後是採用的高德,所以在這採用高德地圖獲取初始位置,其他的還是用百度地圖
- 註冊高德,建立例項,獲取key值
- 引入js
- 高德地圖獲取獲取當前位置:
//獲取當前位置 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中來使用 }); }