参考链接:https://cnodejs.org/topic/564c0a27e4766d487f6fe38d
今天总算解决了定位的问题,记录一下吧。要不然以后用到了又给忘了,之前用的高德地图定位的,死活都整出来,然后就换成百度了,但是后台用的是高德,百度和高德不属于一个坐标体系,需要进行转换,转换公式也是百度的,不过很有用,原文把PI写成了Pi,是作者的笔误吧,它是Math对象的属性,返回圆周率(约等于3.14159)。可以参考javascript菜鸟教程,里面有其他属性的介绍。下面是转换公式:
定位的时候要用到城市的citycode,用百度地图没有找到这个属性,然后用的是高德(是不是很麻烦啊)用高德地图的一个getLocalCity()插件获取当前城市的citycode,代码如下:
用百度获取当前位置的经纬度,,代码如下:
//获取当前位置
var geolocation = new BMap.Geolocation();//创建查询对象,
geolocation.getCurrentPosition(function(r){
if(this.getStatus() == BMAP_STATUS_SUCCESS){
mk = new BMap.Marker(r.point);
getAddress(r.point);
}else {
alert('failed'+this.getStatus());
}
});
//获取地址信息,设置地址label
function getAddress(point){
var gc = new BMap.Geocoder();
gc.getLocation(point, function(rs){
var addComp = rs.addressComponents;
var address =addComp.province +addComp.city +addComp.district +addComp.street +addComp.streetNumber;//获取地址
var cityinfo = addComp.city;
var flag = false;
cityLat=bd_decrypt(point.lng,point.lat).gg_lat;
cityLng=bd_decrypt(point.lng,point.lat).gg_lon;
storage["cityLat"]=bd_decrypt(point.lng,point.lat).gg_lat;
storage["cityLng"]=bd_decrypt(point.lng,point.lat).gg_lon;
storage["regionName"]=cityinfo;
$.each(cityMsg, function(index,item) {
if (item.id==cityadcode) {
flag = true;
return ;
}
});
if(flag){
document.getElementById('vv').innerHTML =cityinfo;
}else{
document.getElementById('vv').innerHTML =cityMsg[0].name;
cityadcode=cityMsg[0].id;
}
$('#vvcode').val(cityadcode)
getbanner()
getWeather();
getOil();
getactivitie();
getcontents();
getHotmerchants(pageNum)
});
}
}
今天又用了一个新东西,就是sessionStorage,它终于派上用场了,用法参考菜鸟教程
这个sessionStorage解决的问题是,当我从新打开项目主页的时候,就会发起自动定位,因为它的存储时间是有限的,所以我在公共页面里面写了一个全局变量,只要项目在运行,它的值就会一直在变,当项目关闭之后,它的值就会从新开始计算,所以我在首页做个判断,只要值为1,定位就重新定位,存储的城市code就会重新刷新。