收藏
回答

后台获取定位轨迹乱跳的问题?

使用 wx.onLocationChange获取定位数据,每30秒为有效数据。然后展示为polyline,为什么会出现定位乱跳的问题,如下图效果

回答关注问题邀请回答
收藏

4 个回答

  • 社区技术运营专员--阳光
    社区技术运营专员--阳光
    2021-11-17

    请具体描述问题出现的流程,并提供能复现问题的简单代码片段(https://developers.weixin.qq.com/miniprogram/dev/devtools/minicode.html)。

    2021-11-17
    有用
    回复
  • 未知
    未知
    2022-10-14

    不漂移才是少见现象,gps存在较弱或丢失或切换基站等操作,出现这种不奇怪。

    主流地图都有纠偏web服务等操作,小程序没见过。

    可能需要有开源算法之类过滤异常点


    2022-10-14
    有用
    回复
  • 武曲心
    武曲心
    2021-11-17

    期间手机有息屏锁屏吗?

    2021-11-17
    有用
    回复 2
    • 罗宇
      罗宇
      发表于移动端
      2021-11-17
      有,反正就锁屏了正常使用
      2021-11-17
      回复
    • 武曲心
      武曲心
      2021-11-18回复罗宇
      手机或者手机管家设置在节省流量电量、应用锁等会让手机锁屏后停止应用的运行,你要确定锁屏后微信是否还在后台运行
      2021-11-18
      回复
  • 罗宇
    罗宇
    2021-11-17

    以下是后台定位代码

      startLocationChange() {
        const that = this
        const d = new Date()
        //检查是否已开启后台定位请求
        if (!APP.globalData.startLocation) {
          wx.startLocationUpdateBackground({
            success(res) => {
              APP.globalData.startLocation = true
              wx.offLocationChange((result) => {})
              wx.onLocationChange((result) => {
                const second = d.getSeconds()
                if (second % 30 === 0) {
                  const markers = that.data.markers
                  const polyline = that.data.polyline
                  const timestamp = d.getTime()
                  //获取本地points缓存并存入变量
                  let points = wx.getStorageSync('points')
                  points = points ? JSON.parse(points) : []
                  if (Object.keys(result).length > 0) {
                    markers[0].latitude = result.latitude.toFixed(6)
                    markers[0].longitude = result.longitude.toFixed(6)
                    that.setData({
                      markers
                    })
                  }
    
    
                  //设置缓存用于5分钟上传
                  points.push({
                    latitude: markers[0].latitude,
                    longitude: markers[0].longitude,
                    timestampparseInt(timestamp / 1000)
                  })
    
    
                  wx.setStorage({
                    key'points',
                    dataJSON.stringify(points)
                  })
    
    
    
                  //合并30秒获取的points数据到polyline
                  polyline[0].points.push({
                    latitude: markers[0].latitude,
                    longitude: markers[0].longitude,
                    timestampparseInt(timestamp / 1000)
                  })
    
    
                  that.setData({
                    polyline
                  })
                }
              })
            },
            fail(res) => {
              console.log(res);
            }
          })
        }
      },
    
    2021-11-17
    有用
    回复
登录 后发表内容