Files
gpx.studio/website/src/lib/units.ts

147 lines
4.4 KiB
TypeScript
Raw Normal View History

2024-04-24 16:12:50 +02:00
import { get } from 'svelte/store';
2024-05-04 15:10:30 +02:00
import { settings } from '$lib/db';
2024-04-24 16:12:50 +02:00
import { _ } from 'svelte-i18n';
2024-05-04 15:10:30 +02:00
const { distanceUnits, velocityUnits, temperatureUnits } = settings;
2024-04-24 16:12:50 +02:00
export function kilometersToMiles(value: number) {
return value * 0.621371;
}
2024-06-13 17:36:43 +02:00
export function milesToKilometers(value: number) {
return value * 1.60934;
}
2024-04-24 16:12:50 +02:00
export function metersToFeet(value: number) {
return value * 3.28084;
}
export function celsiusToFahrenheit(value: number) {
return value * 1.8 + 32;
}
export function distancePerHourToSecondsPerDistance(value: number) {
2024-06-13 17:36:43 +02:00
if (value === 0) {
return 0;
}
2024-04-24 16:12:50 +02:00
return 3600 / value;
}
export function secondsToHHMMSS(value: number) {
var hours = Math.floor(value / 3600);
var minutes = Math.floor(value / 60) % 60;
2024-06-18 12:35:24 +02:00
var seconds = Math.min(59, Math.round(value % 60));
2024-04-24 16:12:50 +02:00
return [hours, minutes, seconds]
.map((v) => (v < 10 ? '0' + v : v))
.filter((v, i) => v !== '00' || i > 0)
.join(':');
}
// Get a string representation of the value with units
export function getDistanceWithUnits(value: number, convert: boolean = true) {
if (convert) {
return getConvertedDistance(value).toFixed(2) + ' ' + getDistanceUnits();
} else {
return value.toFixed(2) + ' ' + getDistanceUnits();
}
}
export function getVelocityWithUnits(value: number, convert: boolean = true) {
2024-05-04 15:10:30 +02:00
if (get(velocityUnits) === 'speed') {
2024-04-24 16:12:50 +02:00
if (convert) {
return getConvertedVelocity(value).toFixed(2) + ' ' + getVelocityUnits();
} else {
return value.toFixed(2) + ' ' + getVelocityUnits();
}
} else {
if (convert) {
return secondsToHHMMSS(getConvertedVelocity(value)) + ' ' + getVelocityUnits();
2024-04-24 16:12:50 +02:00
} else {
return secondsToHHMMSS(value) + ' ' + getVelocityUnits();
2024-04-24 16:12:50 +02:00
}
}
}
export function getElevationWithUnits(value: number, convert: boolean = true) {
if (convert) {
return getConvertedElevation(value).toFixed(0) + ' ' + getElevationUnits();
} else {
return value.toFixed(0) + ' ' + getElevationUnits();
}
}
export function getHeartRateWithUnits(value: number) {
return value.toFixed(0) + ' ' + getHeartRateUnits();
}
export function getCadenceWithUnits(value: number) {
return value.toFixed(0) + ' ' + getCadenceUnits();
}
export function getPowerWithUnits(value: number) {
return value.toFixed(0) + ' ' + getPowerUnits();
}
export function getTemperatureWithUnits(value: number, convert: boolean = true) {
if (convert) {
return getConvertedTemperature(value).toFixed(0) + ' ' + getTemperatureUnits();
} else {
return value.toFixed(0) + ' ' + getTemperatureUnits();
}
}
// Get the units
export function getDistanceUnits() {
2024-05-04 15:10:30 +02:00
return get(distanceUnits) === 'metric' ? get(_)('units.kilometers') : get(_)('units.miles');
2024-04-24 16:12:50 +02:00
}
export function getVelocityUnits() {
2024-05-04 15:10:30 +02:00
if (get(velocityUnits) === 'speed') {
return get(distanceUnits) === 'metric' ? get(_)('units.kilometers_per_hour') : get(_)('units.miles_per_hour');
2024-04-24 16:12:50 +02:00
} else {
2024-05-04 15:10:30 +02:00
return get(distanceUnits) === 'metric' ? get(_)('units.minutes_per_kilometer') : get(_)('units.minutes_per_mile');
2024-04-24 16:12:50 +02:00
}
}
export function getElevationUnits() {
2024-05-04 15:10:30 +02:00
return get(distanceUnits) === 'metric' ? get(_)('units.meters') : get(_)('units.feet');
2024-04-24 16:12:50 +02:00
}
export function getHeartRateUnits() {
return get(_)('units.heartrate');
}
export function getCadenceUnits() {
return get(_)('units.cadence');
}
export function getPowerUnits() {
return get(_)('units.power');
}
export function getTemperatureUnits() {
2024-05-04 15:10:30 +02:00
return get(temperatureUnits) === 'celsius' ? get(_)('units.celsius') : get(_)('units.fahrenheit');
2024-04-24 16:12:50 +02:00
}
// Convert only the value
export function getConvertedDistance(value: number) {
2024-05-04 15:10:30 +02:00
return get(distanceUnits) === 'metric' ? value : kilometersToMiles(value);
2024-04-24 16:12:50 +02:00
}
export function getConvertedElevation(value: number) {
2024-05-04 15:10:30 +02:00
return get(distanceUnits) === 'metric' ? value : metersToFeet(value);
2024-04-24 16:12:50 +02:00
}
export function getConvertedVelocity(value: number) {
2024-05-04 15:10:30 +02:00
if (get(velocityUnits) === 'speed') {
return get(distanceUnits) === 'metric' ? value : kilometersToMiles(value);
2024-04-24 16:12:50 +02:00
} else {
2024-05-04 15:10:30 +02:00
return get(distanceUnits) === 'metric' ? distancePerHourToSecondsPerDistance(value) : distancePerHourToSecondsPerDistance(kilometersToMiles(value));
2024-04-24 16:12:50 +02:00
}
}
export function getConvertedTemperature(value: number) {
2024-05-04 15:10:30 +02:00
return get(temperatureUnits) === 'celsius' ? value : celsiusToFahrenheit(value);
2024-04-24 16:12:50 +02:00
}