分享下微信是如何定位的:
本文主要講解如何利用微信定位,如何將定位到的經緯度轉換為百度地圖對應的經緯度,以及處理定位失敗、取消及錯誤時的默認做法。
//獲取地理位置信息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);//將經緯度傳入到要運用的函數中
} else {
//下面兩行是默認定位到西湖的經緯度
lng = 120.141375;
lat = 30.257806;
toDoFunction(lng, lat);//將經緯度傳入到要運用的函數中
}
}
},
//取消定位
cancel: function () {
//下面兩行是默認定位到西湖的經緯度
var lng = 120.141375;
var lat = 30.257806;
toDoFunction(lng, lat);//將經緯度傳入到要運用的函數中
},
//定位失敗
fail: function () {
//下面兩行是默認定位到西湖的經緯度
var lng = 120.141375;
var lat = 30.257806;
toDoFunction(lng, lat);//將經緯度傳入到要運用的函數中
}
});
//定位發生錯誤
wx.error(function () {
//下面兩行是默認定位到西湖的經緯度
var lng = 120.141375;
var lat = 30.257806;
toDoFunction(lng, lat);//將經緯度傳入到要運用的函數中
});
});
}
});
}
以上代碼,如果可以定位到就用定位到的真正的經緯度,再轉換成百度地圖對應的經緯度,如果定位失敗或者是點擊取消或者發生錯誤,則默認定位到西湖的經緯度。
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持。