微信小程序获取当前位置
问题
之前一直使用wx.getLocation()方法来获取用户的定位,发现总是几率性成功,我们的调用频率是秒一次,其中在做其他业务时也会调用到,参考官方文档发现 位置文档这种方式受到了限制,微信限制30秒只有一次成功,其余返回失败。
解决方法
使用startLocationUpdate、onLocationChange、offLocationChange三个方法搭配使用,可以实现实时获取用户的位置,并且频繁调用不会失败。
封装工具类
// 地里信息位置获取工具类
/**
* 获取用户当前所在的位置 【适应微信新版本获取地里位置信息,旧getLocation方法频繁调用有性能问题,并且30秒只能获得一次成功】
*/
```bash
const getLocation = () => {
return new Promise((resolve, reject) => {
let _locationChangeFn = (res) => {
resolve(res) // 回传地里位置信息
wx.offLocationChange(_locationChangeFn) // 关闭实时定位
wx.stopLocationUpdate(_locationChangeFn); // 关闭监听 不关闭监听的话,有时获取位置时会非常慢
}
wx.startLocationUpdate({
success: (res) => {
wx.onLocationChange(_locationChangeFn)
},
fail: (err) => {
// 重新获取位置权限
wx.openSetting({
success(res) {
res.authSetting = {
"scope.userLocation": true
}
}
})
reject(err)
}
})
})
}
module.exports = {
getLocation
}
调用
```bash
const locationUtils = require('../../../utils/location') // 引入工具类
// 获取当前位置
locationUtils.getLocation().then(res => {
console.log('当前所在位置的经纬度为:')
console.log(res.latitude,res.longitude)
})