背景:在作一个关于地理位置字段时,初始位置使用百度地图获取时失败,获取的位置信息不许确,奈何产品说友商好使的啊,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中来使用 }); }