x***@163.com
x***@163.com
  • 发布:2024-06-25 23:54
  • 更新:2024-06-26 08:55
  • 阅读:186

【报Bug】每隔10秒,使用uni.getLocation获取手机位置,获取到的坐标来回跳动 警卫维度获取不准确

分类:uni-app

产品分类: uniapp/App

PC开发环境操作系统: Windows

PC开发环境操作系统版本号: windows11

HBuilderX类型: 正式

HBuilderX版本号: 4.15

手机系统: Android

手机系统版本号: Android 11

手机厂商: 华为

手机机型: HUAWEI Mate20 Pro 荣耀等多个手机

页面类型: vue

vue版本: vue2

打包方式: 云端

项目创建方式: HBuilderX

App下载地址或H5⽹址: https://api.jiuyuanshifu.com/dow_app/ 救援师傅企业版

示例代码:

// 开启定时
startTimer() {
this.timer = setInterval(() => {
// 调用获取位置的方法传递坐标
this.getWeizhi();
}, 10000)
},
// 清除定时器
stopTimer() {
clearInterval(this.timer);
},
// 获取位置信息传递坐标
getWeizhi() {
let that = this;
uni.getLocation({
type: 'gcj02',
geocode: true,
isHighAccuracy: false,
success: function(zuobiao) {
// console.log(res, '位置信息')
// console.log('当前位置的经度:' + res.longitude);
// console.log('当前位置的纬度:' + res.latitude);
let location = {
longitude: zuobiao.longitude,
latitude: zuobiao.latitude,
}
uni.setStorage({
key: 'location',
data: location,
});
// uni.setStorageSync('location', location);

                    //存储下当前位置的地名  
                    let addressName = '';  
                    addressName = (zuobiao.address.province != undefined ? zuobiao.address.province : '') +  
                        (zuobiao  
                            .address.city != undefined ? zuobiao.address.city : '') + (zuobiao.address  
                            .district !=  
                            undefined ? zuobiao.address.district : '') + (zuobiao.address.street !=  
                            undefined ? zuobiao  
                            .address.street : '') + (zuobiao.address.streetNum != undefined ? zuobiao  
                            .address  
                            .streetNum : '') + (zuobiao.address.poiName != undefined ? zuobiao.address  
                            .poiName :  
                            '');  
                    // console.log(addressName, '城市名字')  
                    uni.setStorage({  
                        key: 'addressName',  
                        data: addressName,  
                    });  
                    // uni.setStorageSync('addressName', addressName);  

                    // console.log(uni.getStorageSync('coords'))  
                    let data = {  
                        latitude: zuobiao.latitude,  
                        longitude: zuobiao.longitude  
                    }  
                    // put_coords(data).then(reslut => {  
                    //  // console.log(reslut)  
                    // })  

                    let token = uni.getStorageSync('token')  
                    uni.request({  
                        url: that.$config.gateway,  
                        method: 'POST',  
                        data: data,  
                        header: {  
                            'content-type': 'application/json',  
                        },  
                        success: (reslut) => {  
                            console.log('请求成功')  
                            // 停止定时任务  
                            that.stopTimer();  
                            // 开启定时任务  
                            that.startTimer();  
                            // console.log(reslut)  
                        }  
                    })  
                }  
            });  
        },  

操作步骤:

// 开启定时
startTimer() {
this.timer = setInterval(() => {
// 调用获取位置的方法传递坐标
this.getWeizhi();
}, 10000)
},
// 清除定时器
stopTimer() {
clearInterval(this.timer);
},
// 获取位置信息传递坐标
getWeizhi() {
let that = this;
uni.getLocation({
type: 'gcj02',
geocode: true,
isHighAccuracy: false,
success: function(zuobiao) {
// console.log(res, '位置信息')
// console.log('当前位置的经度:' + res.longitude);
// console.log('当前位置的纬度:' + res.latitude);
let location = {
longitude: zuobiao.longitude,
latitude: zuobiao.latitude,
}
uni.setStorage({
key: 'location',
data: location,
});
// uni.setStorageSync('location', location);

                    //存储下当前位置的地名  
                    let addressName = '';  
                    addressName = (zuobiao.address.province != undefined ? zuobiao.address.province : '') +  
                        (zuobiao  
                            .address.city != undefined ? zuobiao.address.city : '') + (zuobiao.address  
                            .district !=  
                            undefined ? zuobiao.address.district : '') + (zuobiao.address.street !=  
                            undefined ? zuobiao  
                            .address.street : '') + (zuobiao.address.streetNum != undefined ? zuobiao  
                            .address  
                            .streetNum : '') + (zuobiao.address.poiName != undefined ? zuobiao.address  
                            .poiName :  
                            '');  
                    // console.log(addressName, '城市名字')  
                    uni.setStorage({  
                        key: 'addressName',  
                        data: addressName,  
                    });  
                    // uni.setStorageSync('addressName', addressName);  

                    // console.log(uni.getStorageSync('coords'))  
                    let data = {  
                        latitude: zuobiao.latitude,  
                        longitude: zuobiao.longitude  
                    }  
                    // put_coords(data).then(reslut => {  
                    //  // console.log(reslut)  
                    // })  

                    let token = uni.getStorageSync('token')  
                    uni.request({  
                        url: that.$config.gateway,  
                        method: 'POST',  
                        data: data,  
                        header: {  
                            'content-type': 'application/json',  
                        },  
                        success: (reslut) => {  
                            console.log('请求成功')  
                            // 停止定时任务  
                            that.stopTimer();  
                            // 开启定时任务  
                            that.startTimer();  
                            // console.log(reslut)  
                        }  
                    })  
                }  
            });  
        },  

预期结果:

一条比较正常的轨迹

实际结果:

轨迹飘忽不定,很多分叉,来回移动 获取的经度纬度不准确

bug描述:

发布的是app,每隔10秒,使用uni.getLocation获取手机位置,然后在map地图上绘制轨迹,结果绘制出来的轨迹经常出现偏移,明明是一条直线轨迹,结果取到的点位来回跳动,出现分叉。已经申请了高德安卓平台的key和证书。坐标系采用的是gcj02。PS:有没有别的解决方案呢?

2024-06-25 23:54 负责人:无 分享
已邀请:
x***@163.com

x***@163.com (作者)

请教下大佬们这是怎么回事

7***@qq.com

7***@qq.com

1、开启高精定位isHighAccuracy
2、定位本来就没呢么准

要回复问题请先登录注册