手机定位

2017-12-22  本文已影响0人  笨笨的小蜗牛_用生命奔跑

参考链接: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就会重新刷新。

上一篇 下一篇

猜你喜欢

热点阅读