小程序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
网友评论