uniapp 中APP端调用uni.getLocation偶尔获取不到address解决方法
1.配置geocode为true
uni.getLocation({
type: 'wgs84',
geocode:true,//设置该参数为true可直接获取经纬度及城市信息
success: function (res) {
console.log('获取定位信息',res);
},
fail: function (err) {
console.log("获取定位失败",err);
uni.showToast({
title: '获取定位失败',
icon:'none'
});
}
});
一般情况下,此时可以获取从res.address中获取地址信息,详情
[参考文档]: https://uniapp.dcloud.io/api/location/location?id=getlocation
2.特殊情况:即使配置geocode为true,依然获取不到address信息
此时未报错,只能获取到经纬度信息,返回信息如下:
{
"type": "wgs84",
"altitude": 0,
"latitude": 34.806316,
"longitude": 113.685944,
"speed": 0,
"accuracy": 40,
"errMsg": "getLocation:ok"
}
如果出现这种情况,可以使用plus.maps.Map.reverseGeocode
方法获取address信息:
[参考文档]: https://www.html5plus.org/doc/zh_cn/maps.html#plus.maps.Map.reverseGeocode
// #ifdef APP
uni.getLocation({
type: 'wgs84',
geocode:true,//设置该参数为true可直接获取经纬度及城市信息
success: function (res) {
console.log('获取定位信息',res);
// 创建地图坐标对象
var point = new plus.maps.Point(res.longitude, res.latitude);
//静态方法,反向地理编码
plus.maps.Map.reverseGeocode(point, {},(event)=>{
var address = event.address; // 转换后的地理位置
var point = event.coord; // 转换后的坐标信息
var coordType = event.coordType; // 转换后的坐标系类型
var reg = /.+?(省|市|自治区|自治州|县|区)/g;
var addressList = address.match(reg).toString().split(",");
//注意 因为存在直辖市, 当所在地区为普通省市时,addressList.length == 3,city = addressList[1];当所在地区为直辖市时addressList.length == 2,city = addressList[0];
let city = addressList.length == 3?addressList[1]:addressList[0];
console.log("addressList",addressList);
},
function(e) {
console.log("失败回调",e);
}
);
},
fail: function (err) {
console.log("获取定位失败",err);
uni.showToast({
title: '获取定位失败',
icon:'none'
});
}
});
// #endif
//注意 因为存在直辖市, 当所在地区为普通省市时,addressList.length == 3,city = addressList[1];当所在地区为直辖市时addressList.length == 2,city = addressList[0];
获取到的信息在addressList
里边,如下:
普通省市:["河南省", "郑州市", "金水区"]
直辖市:["上海市", "浦东新区"]