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

高德官方的融路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

你可能感兴趣的:(小程序轨迹记录漂移点位处理简单方式)