uni-app本身有获取地址的接口,点击前往
这个接口首先需要开放位置权限,具体就是android需要打开gprs,ios需要允许应用在使用期间使用地址
不过此时成功的回调地址参数打印并不包含longitude和latitude,应该是在父类里吧这个我没有深究。此时理论上会有address可以直接取到省市区,但是我并没有取到,原因不明,只能采用偏方根据经纬度再调百度或者腾讯地图的接口获取。
考虑到部分功能需要发线上测试所以vconsole的npm包还是不可获取的
微信浏览器作为H5端有2种快捷的方法可以获取经纬度,一种是uni自带的功能
uni.getLocation({
type: 'wgs84',
success: (res) => { // longitude latitude在res对象里不显示
console.log(res)
console.log('当前位置的经度:' + res.longitude);
console.log('当前位置的纬度:' + res.latitude);
console.log(res.address) // 取不到
this.getCity(res.latitude, res.longitude)
},
fail: (res) => {
this.util.message('地址信息获取失败请打开GPRS权限')
}
});
第二种是微信认证获取,此方法较为复杂,切需要后端人员辅助
需要后端配合返回appId,timestamp,nonceStr,signature四个字段
然后需要安装依赖包jweixin-module,每个页面获取都需重新配置config才可调用功能
jweixin.config({
debug: false,
appId: res.appId,
timestamp: res.timestamp,
nonceStr: res.nonceStr,
signature: res.signature,
jsApiList: [
'getLocation'
]
})
getLocation: function(res, callback) {
this.init(res)
jweixin.ready(function(){
jweixin.getLocation({
type: 'wgs84',
success: function (r) {
console.log('success')
callback(r)
}
})
})
}
最后就是很成熟的经纬度获取地址的逆地址解析,百度和腾讯的都可以,不过需要注意的是微信公众号前端页面是不可以打开一个不在开发设置白名单内的请求的。请求status会是0,这边依旧需要从后端发起http请求,腾讯地图的控制台中需要在key管理-设置中勾选WebServiceAPI,并授权发起服务的服务器ip