uni-app报Bug uni.getLocation的成功回调中经纬度异常为5E-324且address为空

发布于 1周前 作者 yibo5220 来自 Uni-App

uni-app报Bug uni.getLocation的成功回调中经纬度异常为5E-324且address为空

开发环境 版本号 项目创建方式
Windows 10 HBuilderX

示例代码:

getLocation() {
let _this = this
uni.showLoading({
title: '位置获取中',
mask: true
});
_this.isLoading = true
uni.getLocation({
type: 'gcj02',
geocode: true,
success: function(res) {
// 获取地址成功 ==> 经纬度
_this.latitudeEnd = res.latitude // 纬度
_this.longitudeEnd = res.longitude // 经度
// 当前位置获取
_this.addrEnd = res.address
},
fail: function(res) {
_this.locationCheckFlagEnd = true
_this.localCheckFalseEnd = true
_this.uploadAbnFlagEnd = true
uni.showToast({
// title: res.errMsg,
title: '获取定位错误,请允许应用设备定位权限授权',
icon: 'none',
duration: 3000
});
},
complete: function() {
_this.isLoading = false
uni.hideLoading();
}
});
},

操作步骤:

打开页面,同意定位权限以后,请求uni.getLocation,进入成功回调,返回的经纬度数据异常

预期结果:

打开页面,同意定位权限以后,请求uni.getLocation,进入成功回调,返回的经纬度数据符合正常

实际结果:

{"type":"gcj02","altitude":5e-324,"latitude":5e-324,"longitude":5e-324,"speed":0,"accuracy":0,"errMsg":"getLocation:ok"}

bug描述:

uni.getLocation的成功回调,使用的第三方地图为百度地图,大多数手机及用户获取正常,部分异常;回调成功后,经纬度为5E-324,address为空。


4 回复

请检查1.百度地图申请appkey是否正确,包名和SHA1是否正确 2.如果出现可以看一下app权限是否已授权定位权限


这些配置是正确的,不然也不会是部分手机地址定位异常;权限也是正常授权

大多数用户可以,部分异常,看看是否有什么规律
参考 ask 社区 其他用户的反馈
看起来是设置的原因,你可以测试一下权限拒绝的情况,针对这个特殊的返回值单独提示用户去授权解决

在处理uni-app中uni.getLocation API返回异常经纬度(如5E-324)和空地址的问题时,通常这表示定位失败或定位数据无效。以下是一些可能的解决方案和代码示例,帮助你更好地调试和修复这个问题。

1. 检查权限配置

首先,确保你的应用已经正确配置了定位权限。在manifest.json中,你需要添加定位权限配置:

"mp-weixin": { // 以微信小程序为例
    "requiredPrivateInfos": ["getUserInfo", "getLocation"]
}

同时,在调用uni.getLocation之前,确保用户已经授权定位权限。

2. 调用uni.getLocation并处理错误

下面是一个调用uni.getLocation并处理可能错误的示例代码:

uni.getLocation({
    type: 'gcj02', // 坐标系类型,默认为 wgs84
    success: (res) => {
        if (res.latitude === 5E-324 || res.longitude === 5E-324) {
            console.error('定位失败,经纬度异常');
        } else {
            console.log('定位成功', res.latitude, res.longitude, res.address);
            // 你的后续处理逻辑
        }
    },
    fail: (err) => {
        console.error('定位失败', err);
    },
    complete: () => {
        console.log('定位请求完成');
    }
});

3. 检查设备定位服务

确保用户的设备定位服务已经开启,并且当前环境允许定位(例如,不在飞行模式下,GPS信号良好等)。

4. 使用try-catch捕获异常

虽然uni.getLocation的回调通常是异步的,使用try-catch直接捕获异常可能不适用,但你可以通过检查回调结果来间接处理异常:

try {
    uni.getLocation({
        // ... 同上配置
        success: (res) => {
            if (!res || !res.latitude || !res.longitude || res.address === '') {
                throw new Error('定位数据无效');
            }
            // 定位成功处理逻辑
        },
        fail: (err) => {
            throw new Error(`定位失败: ${err.message}`);
        }
    });
} catch (error) {
    console.error('定位过程中发生错误', error);
}

注意:由于uni.getLocation是异步调用,这里的try-catch主要用于同步代码块的错误捕获,对于异步回调中的错误,应通过回调内的错误处理逻辑来处理。

通过上述方法,你可以更有效地诊断和解决uni.getLocation返回异常经纬度和空地址的问题。

回到顶部