在微信小程式中獲取手機定位資訊
wx.getLocation({ type: 'wgs84', success(res) { // console.log(res) const latitude = res.latitude const longitude = res.longitude if (flag) { getMinKey(_this, latitude, longitude, callback, errback) } }, fail(res) { // console.log(res) if (res.errCode == 2) { common.getToast('請開啟手機定位授權'); } }, })
官方文件給出的wx.getLocation只能獲取到當前位置的經緯度,沒有給出當前位置的具體資訊,這時需要將經緯度轉換為詳細地址。
騰訊位置服務為微信小程式提供了基礎的標點能力、線和圓的繪製介面等地圖元件和位置展示、地圖選點等地圖API位置服務能力支援,使得開發者可以自由地實現自己的微信小程式產品。
配置可參考:https://lbs.qq.com/miniProgram/jsSdk/jsSdkGuide/jsSdkOverview
使用:
location-address.js
//獲取定位地址,透過經緯度轉成詳細地址 const app = getApp(); const common = require('./common.js'); const dataMainModule = require('./main.js'); // 引入SDK核心類,js檔案根據自己業務,位置可自行放置 const QQMapWX = require('./qqmap-wx-jssdk.min.js'); let isWaitTenSeconds = false; //等待10秒如果定位異常置為true let addrNum = 0; /** * 獲取當前定位資訊 * @param flag 是否返回經緯度轉換地址詳細資訊 * @returns Boolean */ const currentLocation = (_this, flag = false, callback, errback) => { let that = _this; var opt = { scope: 'scope.userLocation', content: '獲取您的手機定位位置' } app.getSettingRecord(opt).then((data) => { wx.getLocation({ type: 'wgs84', success(res) { // console.log(res) const latitude = res.latitude const longitude = res.longitude if (flag) { getMinKey(_this, latitude, longitude, callback, errback) } }, fail(res) { // console.log(res) if (res.errCode == 2) { common.getToast('請開啟手機定位授權'); } }, }) }) } /** * 經緯度轉換成詳細地址 * @param _this 頁面作用域 * @param latitude 經度 * @param longitude 緯度 * @returns Boolean */ const getMinKey = (_this, latitude, longitude, callback, errback) => { let that = _this; //var key = '7IABZ-XBRRT-C4OXJ-VG2LS-EOBG5-4JFG4'; dataMainModule.getMinKey({ type: 1 }, (res) => { // console.log('獲取定位key', res) if (res.retCode == 200 && res.mapKey) { var mapKey = res.mapKey, retryCount = res.retryCount; mapKey = mapKey.replace(/^"|"$/g, ''); var qqmapsdk = new QQMapWX({ key: mapKey }); var params = { latitude: latitude, longitude: longitude }; qqmapsdk.reverseGeocoder({ location: params, success: function (res1) { // console.log(res1); if (res1) { addrNum = 0; isWaitTenSeconds = false; if (callback) { callback(res1.result) } } }, fail: function (res) { // console.log(res); addrNum++; common.log.warn("獲取定位地址失敗", JSON.stringify({ errMsg: JSON.stringify(res), mapKey: mapKey })); common.log.setFilterMsg("getMinKey"); //按後臺返回次數嘗試重新獲取 if (addrNum <= retryCount) { setTimeout(() => { getMinKey(_this, latitude, longitude, callback, errback) }, 2000) } if (errback) { errback(res) } } }) } else { // wx.removeStorageSync('zbg_standard_Address'); if (errback) { errback(res) } } }, (res) => { // console.log(res) //common.getToast(res); setTimeout(() => { isWaitTenSeconds = true }, 15000) if (errback) { errback(res) } }) } module.exports = { currentLocation, getMinKey }
頁面使用:
getmobileSeat() { //獲取手機定位位置 let that =this; locationAddress.currentLocation(this, true,(res)=>{ if(res){ var address = res.formatted_addresses?.recommend; console.log(address) that.setData({ mobileSeat:address }) } }); },
經緯度轉換詳細地址資料