美文网首页
小程序轨迹记录漂移点位处理简单方式

小程序轨迹记录漂移点位处理简单方式

作者: litielongxx | 来源:发表于2022-10-13 16:00 被阅读0次
    高德官方的融路api
    小程序gps,不漂移才是少见现象,
    gps存在较弱或丢失或切换基站等操作,出现这种不奇怪。
    主流地图都有纠偏web服务等操作,小程序没见过。
    想要好的解决,建议找找有开源算法之类过滤异常点没。
    一般app解决方式:
    达到一定点比如5-10个后上传后,用地图sdk自带的方法修正下轨迹,大致为补偿、平滑等纠察操作,较好的效果类似于高德轨迹或百度鹰眼算法识别(但实际也会存在上图补路后反而不实际情况)。
    简单的建议参考如下:
    https://developer.amap.com/demo/javascript-api/example/grasp/grasp-driving
    临时处理可以试试角度画直线、简单取舍点位。
    计算两轨迹点之间角度
    filterPoint() {
          let temp = []
          this.points.forEach((item, i) => {
            if (i == 0) {
              temp.push(item)
              return
            }
            // 坐标1
            let position1 = {
              lng: this.points[i - 1].longitude,
              lat: this.points[i - 1].latitude
            }
    
            // 坐标2
            let position2 = {
              lng: item.longitude,
              lat: item.latitude
            }
            let valLng = position1.lng - position2.lng;
            let valLat = position1.lat - position2.lat;
    
            // 返回一个绝对值
            let absoluteLng = Math.abs(valLng);
            let absoluteLat = Math.abs(valLat);
    
            // 取得三角形的斜边
            let hypotenuse = Math.hypot(absoluteLng, absoluteLat);
            // 计算弧度
            let radina = Math.acos(absoluteLng / hypotenuse);
    
            // 计算角度
            let angle = Math.floor(radina * 180 / Math.PI);
    
            // 尖角剔除30°以内的,如果是30°-60°则结合实际判断取舍 
           // if (angle >= 30 && angle <= 60) {
           //     temp.push(item)
           //  }
            console.log(i, "两坐标点计算出的角度为:", angle)
          })
    
          return temp
    
        },
    

    ps:
    数据清洗去除漂移点
    https://blog.csdn.net/dugushangliang/article/details/102821219
    计算轨迹点之间角度
    https://blog.csdn.net/qq_37379610/article/details/118855685

    相关文章

      网友评论

          本文标题:小程序轨迹记录漂移点位处理简单方式

          本文链接:https://www.haomeiwen.com/subject/nflczrtx.html