我有一个大问题:
我有一组gps数据,有必要计算一些信息,除了总高程增益,我都做了在路上。有一个像[825.23423, 827.39420, 828.19319, ...]
这样的数组,它存储了经过的每个gps点的高程,我需要计算完整的和。问题是gps不是很精确,有时会给出一些不正确的高度,这会使总和出错。我尝试了很多方法来平滑数据,下面是一些:
- 设置一个最小值来求和高程增益
- 得到"sub-arrays"并使它们的介质相加后的高程增益。
- 得到"sub-arrays"然后弹出非常见值并将其移动到sum。
- 我实际混合的方式,它变得更好,但甚至没有接近完美:
const getMediaFixed = (values: number[]) => {
values.sort((a, b) => {
return a - b;
});
values.pop();
values.shift();
const media = values.reduce((a, b) => a + b) / values.length;
return media;
};
let last: number = elevations[0];
let elevationSum = 0;
// let countLimit: number = 1;
for (let i = 0; i < elevations.length - 5; i += 5) {
let media: number;
if (i <= elevations.length - 4) {
media = getMediaFixed([
elevations[i],
elevations[i + 1],
elevations[i + 2],
elevations[i + 3],
elevations[i + 4],
]);
} else {
media = elevations[i];
}
const temp = 0.75 * last + 0.25 * media;
if (temp - last > 0) {
elevationSum += temp - last;
}
last = temp;
}
关键是它不管用。
这是一个从GPX文件中完美计算的网站(我找不到联系方式来寻求帮助):https://www.trackreport.net
我感谢任何改进代码的想法!
我使用指数移动平均线来平滑海拔阵列,然后我使用1米来忽略bug !
谢谢。