【发布时间】:2021-12-08 14:22:50
【问题描述】:
我这里有个大问题:
我有一组 GPS 数据,需要计算一些信息,除了路线中的总海拔增益,我都做了。
有一个像 [825.23423, 827.39420, 828.19319, ...] 这样的数组,它存储每个 gps 点的高度,我需要计算全部总和。
问题是 gps 不是那么准确,有时会给出一些不正确的高度,这会使总和出错。
我尝试了很多方法来平滑数据,这里有一些:
- 设置一个最小值以对海拔增益求和
- 获取“子阵列”并制作它们的媒体以求和之后的高程增益。
- 获取“子数组”,然后弹出并移动不常见的值以求和。
- 而我混合所有的实际方式,它变得更好,但甚至没有接近完美:
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
感谢任何改进代码的想法!
【问题讨论】:
-
您是否尝试过使用 moving average 之类的东西来平滑数据点?
-
我今天试过了,但它适用于某些类型的路线,而不适用于其他类型。
-
你有关于海拔高度的样本数据点吗?
标签: javascript gps kalman-filter elevation