uni-app uni.getLocation 开启高精度定位时,荣耀手机定位不准确,获取的数据精度只有小数点后5位

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

uni-app uni.getLocation 开启高精度定位时,荣耀手机定位不准确,获取的数据精度只有小数点后5位

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

产品分类:uniapp/App
PC开发环境操作系统:Windows
HBuilderX类型:正式
手机系统:Android
手机系统版本号:Android 15
手机厂商:华为
手机机型:华为荣耀
页面类型:vue
vue版本:vue2
打包方式:云端

示例代码:

getaddres() {
let that = this;
uni.getLocation({
type: 'gcj02',
isHighAccuracy: true,
success: function(res) {
// 获取位置信息成功
that.newaddress = res;
},
fail: function(res) {
console.log(res);
}
});
},

操作步骤:

getaddres() {
let that = this;
uni.getLocation({
type: 'gcj02',
isHighAccuracy: true,
success: function(res) {
// 获取位置信息成功
that.newaddress = res;
},
fail: function(res) {
console.log(res);
}
});
},

预期结果:

期望app荣耀、华为手机开启高精度定位后获取的经纬度数据类似于这样:34.75671413845486    113.7713264973958

实际结果:

getaddres() {
let that = this;
uni.getLocation({
type: 'gcj02',
isHighAccuracy: true,
success: function(res) {
// 获取位置信息成功
that.newaddress = res;
},
fail: function(res) {
console.log(res);
}
});
},

bug描述:

开启高精度定位后,app荣耀、华为手机获取的经纬度不准,只有小数点5位,ios开启高精度定位后,获取到的经纬度就是34.75671413845486    113.7713264973958

1 回复

在处理uni-app中使用uni.getLocation开启高精度定位时遇到荣耀手机定位不准确的问题,通常涉及到几个层面的调试和优化。以下是一些可能的解决方案和代码示例,这些示例旨在帮助你更好地理解和调整定位逻辑。

1. 确保权限和配置正确

首先,确保你的应用已经正确申请并获得了定位权限。在manifest.json中配置必要的权限:

"mp-weixin": { // 或其他平台配置
  "requiredPrivateInfos": ["getUserInfo", "getLocation"]
}

在调用uni.getLocation之前,检查权限状态:

uni.getSetting({
  success: function(res) {
    if (!res.authSetting['scope.userLocation']) {
      uni.authorize({
        scope: 'scope.userLocation',
        success: function() {
          // 用户同意授权后再次调用 getLocation
          getLocation();
        },
        fail: function() {
          console.log('用户拒绝授权');
        }
      });
    } else {
      getLocation();
    }
  }
});

2. 使用高精度定位选项

在调用uni.getLocation时,确保设置了高精度选项:

function getLocation() {
  uni.getLocation({
    type: 'gcj02', // 坐标系,可选值:'wgs84'、'gcj02'(国测局坐标)、'bd09ll'
    highAccuracy: true, // 启用高精度定位
    success: function(res) {
      console.log('位置信息:', res);
      // 处理位置信息,注意精度小数点位数
      const latitude = res.latitude.toFixed(6); // 尝试保留更多小数位
      const longitude = res.longitude.toFixed(6);
      console.log('高精度位置:', latitude, longitude);
    },
    fail: function(err) {
      console.error('获取位置失败:', err);
    }
  });
}

3. 考虑系统级因素

对于荣耀手机等特定设备,定位精度问题可能与系统级定位服务设置有关。建议用户检查手机系统设置中的定位服务选项,确保高精度定位服务(如GPS、AGPS、网络定位等)已开启。

4. 使用第三方定位服务

如果原生定位功能不能满足需求,可以考虑集成第三方定位SDK,这些SDK通常提供更丰富的定位策略和优化算法。例如,集成百度地图、高德地图等提供的定位SDK。

结论

由于定位精度受多种因素影响(包括设备硬件、网络环境、系统权限等),上述代码和配置只能作为基础调试步骤。如果问题依旧存在,可能需要进一步分析设备日志或考虑与设备厂商合作排查问题。

回到顶部