分享下微信是如何定位的:
本文主要讲解如何利用微信定位,如何将定位到的经纬度转换为百度地图对应的经纬度,以及处理定位失败、取消及错误时的默认做法。
获取地理位置信息start
//封装成一个函数
function getPosition() {
//用ajax请求
$.ajax({
url: "/wechat/jssdk",//请求地址
type: 'post',//post请求
dataType: 'json',contentType: "application/x-www-form-urlencoded; charset=utf-8",data: {
'url': location.href.split('#')[0]//将第一个#号前的地址传递
},//请求成功的函数
success: function (data) {
wx.config({
// debug: true,appId: data.data.appId,timestamp: data.data.timestamp,nonceStr: data.data.nonceStr,signature: data.data.signature,jsApiList: ['checkJsApi','getLocation']
});
wx.ready(function () {
wx.getLocation({
//获得定位成功
success: function (res) {
//这是微信返回的真正经纬度
var oldLat = res.latitude; // 纬度,浮点数,范围为90 ~ -90
var oldLng = res.longitude; // 经度,浮点数,范围为180 ~ -180。
/*下面是为了将获得的真正经纬度转换为对应的百度经纬度,因为是利用百度地图的经纬度去查询数据的,数据库中存的也是百度的经纬度*/
//创建一个百度地图的点
var customerPoint = new BMap.Point(oldLng,oldLat);
//
var convertor = new BMap.Convertor();
var pointArr = [];//创建一个数组
pointArr.push(customerPoint);//将刚才的点放进去
convertor.translate(pointArr,1,5,initMap); //转换坐标
function initMap(data) {
if (data.status === 0) {//转换成功
var point = data.points[0];//得到后的点
var lng = point.lng;//获得转换后的经度
var lat = point.lat;//获得转换后的纬度
toDoFunction(lng,lat);//将经纬度传入到要运用的<a href="https://www.jb51.cc/tag/hanshu/" target="_blank" class="keywords">函数</a>中
} else {
//下面两行是默认定位到西湖的经纬度
lng = 120.141375;
lat = 30.257806;
toDoFunction(lng,lat);//将经纬度传入到要运用的<a href="https://www.jb51.cc/tag/hanshu/" target="_blank" class="keywords">函数</a>中
}
}
},//取消定位
cancel: function () {
//下面两行是默认定位到西湖的经纬度
var lng = 120.141375;
var lat = 30.257806;
toDoFunction(lng,lat);//将经纬度传入到要运用的<a href="https://www.jb51.cc/tag/hanshu/" target="_blank" class="keywords">函数</a>中
},//定位失败
fail: function () {
//下面两行是默认定位到西湖的经纬度
var lng = 120.141375;
var lat = 30.257806;
toDoFunction(lng,lat);//将经纬度传入到要运用的<a href="https://www.jb51.cc/tag/hanshu/" target="_blank" class="keywords">函数</a>中
}
});
//定位发生<a href="https://www.jb51.cc/tag/cuowu/" target="_blank" class="keywords">错误</a>
wx.error(function () {
//下面两行是默认定位到西湖的经纬度
var lng = 120.141375;
var lat = 30.257806;
toDoFunction(lng,lat);//将经纬度传入到要运用的<a href="https://www.jb51.cc/tag/hanshu/" target="_blank" class="keywords">函数</a>中
});
});
}
});
}
以上代码,如果可以定位到就用定位到的真正的经纬度,再转换成百度地图对应的经纬度,如果定位失败或者是点击取消或者发生错误,则默认定位到西湖的经纬度。
原文链接:https://www.f2er.com/js/44064.html