uni-app uni.getLocation 开启高精度定位时,荣耀手机定位不准确,获取的数据精度只有小数点后5位
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
在处理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。
结论
由于定位精度受多种因素影响(包括设备硬件、网络环境、系统权限等),上述代码和配置只能作为基础调试步骤。如果问题依旧存在,可能需要进一步分析设备日志或考虑与设备厂商合作排查问题。