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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lOJEIdlK-1640680878054)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20211228161204165.png)]

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里边,如下:

普通省市:["河南省", "郑州市", "金水区"]
直辖市:["上海市", "浦东新区"]
Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐