@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
JavaScript
;
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;