收藏
回答

iPhone7 ios15.7.3 onLocationUpdate 获取经纬度不准确?

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)'
            }
          }
        })
      }
    }
  })
}
回答关注问题邀请回答
收藏

3 个回答

  • showms
    showms
    2023-02-17

    误差挺正常的

    2023-02-17
    有用
    回复
  • 游戏人生
    游戏人生
    2023-02-17

    肯定是有误差的,这个你很难比较出来

    你需要用另外一部iphone7 一样的手机比较下,看下是代码问题还是手机硬件问题

    2023-02-17
    有用
    回复
  • M.
    M.
    2023-02-17

    定位本来就存在一定的误差。有时候还会2-3公里以上。如果对精度要求很高的话设置GPS模式定位。不要默认。默认的话优先用基站定位

    2023-02-17
    有用
    回复 2
    • 非心主义🍭
      非心主义🍭
      2023-09-21
      这个在哪设置
      2023-09-21
      回复
    • 木子李
      木子李
      04-26
      怎么设置GPS模式定位
      04-26
      回复
登录 后发表内容