Extraer información de un track GPX

Estaba haciendo un pequeño script en NodeJS para extraer la información de mis tracks de BTT. Esta es la información básica que se puede extraer:

$ node xml_stats.js ../rutesgps/montnegreopenmtb_32.gpx
track: ../rutesgps/montnegreopenmtb_32.gpx
2020-11-05
29.4 Km (distància total)
02:25:40 (temps en moviment)
02:58:01 (temps total)
1121 m (desnivell acumulat)
886 m (desnivell acumulat amb filtre)
143m -> 650m (altitud min and max)

La dificultad principal está en entender qué significa y cómo se calcula el desnivel acumulado. Pongamos por ejemplo una excursión bastante plana com puede ser el Passeig de les Aigües de Barcelona. Teniendo en cuenta que la resolución de mi GPS es de 1 metro (sin decimales), el hecho de recorrer una superficie plana hace que se vaya acumulando los metros de desnivel de una manera exagerada (aunque el GPS tuviera más resolución también pasaría). Lo primero que haremos es recalcular las elevaciones de mi track con algún servicio online que dé las alturas exactas, y con algún decimal. Después, la solución pasa por filtrar los datos, hacer un suavizado, es decir, hacer una media. Por ejemplo, por cada punto cogemos el valor de la elevación haciendo la media entre el punto actual y los puntos anterior y posterior. Sería una media de tres puntos. Como cada punto se graba a los 4 segundos, sería una media de 12 segundos. Ahora bien, puedo hacer filtrados de 5, 7, 9 o 11 puntos, i da como resultado valores de pendient acumulado cada vez más pequeños. ¿Qué criterio seguir? El caso es que los diferentes sistemas (mi GPS, wikiloc, etc…) dan valores diferentes. Esto hace que medir la elevación acumulada en una excursión no sea una medida demasiado fiable. Este efecto no es demasiado problemático en las excursiones con bajadas y subidas largas y constantes. Por contra, con excursiones con zonas llanas y terreno irregular el efecto se acumula más.

Todos estos cálculos dan pie a programar otro script para calcular subidas donde podemos definir unas cronoescaladas, subidas que se van repitiendo en los entrenamientos y se podrá extraer información para comparar. De ello hablaremos en un próximo post…