iPhone7,IOS 15.7.3,基础库版本8.0.16,通过wx.onLocationChange 获取小程序用户实时经纬度不准确,导致用户离目标地距离变大,
目前其他手机型号都是正常的,未遇到此类问题。APPID: wx4133b594c4acf6b7
手机型号图片
距离反馈图片
获取经纬度代码
const calculateDistance = currentLocation => {
const { latitude, longitude } = currentLocation
console.log(currentLocation)
if (latitude && longitude) {
const qqmapsdk = new QQMapWX({
key: TENCENT_MAP_KEY // 必填
})
state.latitude = latitude
state.longitude = longitude
qqmapsdk.calculateDistance({
mode: 'straight', // 计算直线距离,不调用接口
from: {
latitude,
longitude
},
to: [
{
latitude: state.targetLat,
longitude: state.targetLon
}
],
success: data => {
if (data.message === 'query ok') {
const distance = data.result.elements[0].distance
state.isInScope = distance <= state.radius
!state.isInScope && (state.notInScopeMsg = `${state.radius}m内可定点确认,当前离消纳场${distance.toLocaleString()}m`)
} else {
state.notInScopeMsg = '计算距离错误'
}
},
fail: err => {
state.notInScopeMsg = err.message + '(1)'
}
})
} else {
state.notInScopeMsg = '获取用户经纬度错误(4)'
}
}
const handleLocationUpdate = () => {
Taro.startLocationUpdate({
type: MAP_TYPE,
success: () => {
state.rejected = false // 用户同意
Taro.onLocationChange(calculateDistance)
},
fail: err => {
if (err.errMsg === 'startLocationUpdate:fail auth deny') {
state.notInScopeMsg = '用户未授权地理位置, 请点击授权'
state.rejected = true // 用户拒绝,弹框提示指引用户授权
openSetting()
} else {
state.notInScopeMsg = err.errMsg + '(2)'
Taro.getLocation({
type: MAP_TYPE,
success: res => {
const { longitude, latitude, errMsg } = res
if (errMsg === 'getLocation:ok') {
if (latitude && longitude) {
calculateDistance({ longitude, latitude })
} else {
state.notInScopeMsg = '获取用户经纬度错误(4)'
}
} else {
state.notInScopeMsg = errMsg + '(5)'
}
}
})
}
}
})
}
误差挺正常的
肯定是有误差的,这个你很难比较出来
你需要用另外一部iphone7 一样的手机比较下,看下是代码问题还是手机硬件问题
定位本来就存在一定的误差。有时候还会2-3公里以上。如果对精度要求很高的话设置GPS模式定位。不要默认。默认的话优先用基站定位