UNPKG

@sports-alliance/sports-lib

Version:

A Library to for importing / exporting and processing GPX, TCX, FIT and JSON files from services such as Strava, Movescount, Garmin, Polar etc

81 lines (80 loc) 4.63 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.EventExporterGPX = void 0; var data_latitude_degrees_1 = require("../../../data/data.latitude-degrees"); var data_distance_1 = require("../../../data/data.distance"); var data_heart_rate_1 = require("../../../data/data.heart-rate"); var data_cadence_1 = require("../../../data/data.cadence"); var data_temperature_1 = require("../../../data/data.temperature"); var data_power_1 = require("../../../data/data.power"); var data_altitude_1 = require("../../../data/data.altitude"); var data_speed_1 = require("../../../data/data.speed"); var data_longitude_degrees_1 = require("../../../data/data.longitude-degrees"); var data_time_1 = require("../../../data/data.time"); var _a = require('gpx-builder'), buildGPX = _a.buildGPX, GarminBuilder = _a.GarminBuilder; var _b = GarminBuilder.MODELS, Point = _b.Point, Metadata = _b.Metadata, Person = _b.Person, Copyright = _b.Copyright, Link = _b.Link, Track = _b.Track, Segment = _b.Segment; var EventExporterGPX = /** @class */ (function () { function EventExporterGPX() { this.fileType = 'application/gpx+xml'; this.fileExtension = 'gpx'; } EventExporterGPX.prototype.getAsString = function (event) { return new Promise(function (resolve, reject) { var tracks = []; event.getActivities().forEach(function (activity) { // We cannot export activities with no positional data! if (!activity.hasPositionData()) { return; } var timeStream = activity.generateTimeStream([data_latitude_degrees_1.DataLatitudeDegrees.type, data_longitude_degrees_1.DataLongitudeDegrees.type]); // @todo it should make an activity copy activity.addStream(timeStream); var segment = new Segment(activity .getStreamDataTypesBasedOnDataType(data_latitude_degrees_1.DataLatitudeDegrees.type, [ data_longitude_degrees_1.DataLongitudeDegrees.type, data_time_1.DataTime.type, data_distance_1.DataDistance.type, data_heart_rate_1.DataHeartRate.type, data_cadence_1.DataCadence.type, data_temperature_1.DataTemperature.type, data_power_1.DataPower.type, data_altitude_1.DataAltitude.type, data_speed_1.DataSpeed.type ]) .reduce(function (pointsArray, data, index, array) { pointsArray.push(new Point(data[data_latitude_degrees_1.DataLatitudeDegrees.type], data[data_longitude_degrees_1.DataLongitudeDegrees.type], { ele: data[data_altitude_1.DataAltitude.type] || undefined, time: new Date(activity.startDate.getTime() + data[data_time_1.DataTime.type] * 1000), hr: data[data_heart_rate_1.DataHeartRate.type], power: data[data_power_1.DataPower.type] || undefined, speed: data[data_speed_1.DataSpeed.type] || undefined, atemp: data[data_temperature_1.DataTemperature.type] || undefined, cad: data[data_cadence_1.DataCadence.type] || undefined, extensions: { power: data[data_power_1.DataPower.type] || undefined, distance: data[data_distance_1.DataDistance.type] || undefined } })); return pointsArray; }, [])); tracks.push(new Track([segment], { name: activity.type })); // @todo it should make an activity copy activity.removeStream(timeStream); }); var builder = new GarminBuilder(); builder.setTracks(tracks); builder.setMetadata(new Metadata({ name: event.name, desc: event.description, // author: new Person, copyright: new Copyright('Quantified-Self.IO ', new Date().getFullYear().toString()), link: new Link('https://quantified-self.io/', { text: 'Quantified Self IO', type: 'Application' }), time: new Date() })); builder.data.attributes.creator = event.getFirstActivity().creator.name; resolve(buildGPX(builder.toObject())); }); }; return EventExporterGPX; }()); exports.EventExporterGPX = EventExporterGPX;