Tengo un gran problema aquí:
Tengo una matriz de datos gps y es necesario calcular algunas informaciones, lo hice todo excepto la ganancia total de elevación en la ruta. Hay una matriz como esta [825.23423, 827.39420, 828.19319, ...] que almacena la elevación de cada punto gps pasado y necesito calcular la suma total. El problema es que el gps no es tan preciso y a veces da algunas elevaciones incorrectas, y hace que la suma salga mal. Probé muchas formas de suavizar los datos, aquí hay algunas:
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; }El punto es que no está funcionando de todos modos.
Aquí hay un sitio que funciona perfectamente calculando desde un archivo GPX (no pude encontrar el contacto para pedir ayuda): https://www.trackreport.net
Agradezco cualquier idea para mejorar el código!
¡Lo hice usando el promedio móvil exponencial para suavizar la matriz con elevaciones y luego usé 1 metro para ignorar los errores!
Gracias.