Sports Lib
A Library for processing GPX, TCX, FIT and JSON files from services such as Strava, Movescount, Garmin, Polar etc
About
Sports Lib tries to achieve a common domain model and lib for sport activity formats
such as GPX, TCX, FIT and other popular formats.
Currently the support is limited to the main formats: GPX, TCX, FIT and JSON*
*JSON is for specific services while GPX, TCX, FIT should be compatible with the move common services,
such as Strava, Movescount, Garmin, Polar and any other service that supports the above formats.
Install
npm install @thomaschampagne/sports-lib --save
Examples
GPX
import {SportsLib} from '@thomaschampagne/sports-lib';
const gpxString = 'Some string from a file etc';
SportsLib.importFromGPX(gpxString).then((event)=>{
const distance = event.getDistance();
const duration = event.getDuration();
});
TCX
import {SportsLib} from '@thomaschampagne/sports-lib';
const tcxString = 'Some string from a file etc';
SportsLib.importFromTCX((new DOMParser()).parseFromString(tcxString, 'application/xml')).then((event)=>{
const distance = event.getDistance();
const duration = event.getDuration();
});
FIT
import {SportsLib} from '@thomaschampagne/sports-lib';
SportsLib.importFromFit(arrayBuffer).then((event)=>{
const distance = event.getDistance();
const duration = event.getDuration();
});
Export
const gpxString = await new EventExporterGPX().getAsString(event);
const blob = new Blob(
[jsonString],
{type: new EventExporterGPX().fileType},
);
Example converting a FIT file to GPX
Thanks to @guikeller
import fs from 'fs';
import sportsLibPkg from '@thomaschampagne/sports-lib';
import exporterPkg from '@thomaschampagne/sports-lib/lib/events/adapters/exporters/exporter.gpx.js'
const { SportsLib } = sportsLibPkg;
const { EventExporterGPX } = exporterPkg;
const inputFilePath = '/tmp/test.fit';
const outputGpxFilePath = '/tmp/test.gpx';
const inputFile = fs.readFileSync(inputFilePath, null);
if (!inputFile || !inputFile.buffer) {
console.error('Ooops, could not read the inputFile or it does not exists, see details below');
console.error(JSON.stringify(inputFilePath));
return;
}
const inputFileBuffer = inputFile.buffer;
SportsLib.importFromFit(inputFileBuffer).then((event) => {
const gpxPromise = new EventExporterGPX().getAsString(event);
gpxPromise.then((gpxString) => {
fs.writeFileSync(outputGpxFilePath, gpxString, (wError) => {
if (wError) {
console.error('Ooops, something went wrong while saving the GPX file, see details below.');
console.error(JSON.stringify(wError));
}
});
console.log('Converted FIT file to GPX successfully!');
console.log('GPX file saved here: ' + outputGpxFilePath);
}).catch((cError) => {
console.error('Ooops, something went wrong while converting the FIT file, see details below');
console.error(JSON.stringify(cError));
});
});