flight-planner
Version:
Plan and route VFR flights
96 lines (95 loc) • 3.63 kB
JavaScript
import convert from "convert-units";
import { DefaultUnits } from "./constants.js";
/**
* Nautical miles to kilometers conversion factor (exact).
*/
const NM_TO_KM = 1.852;
/**
* Converts speed from default units to the specified units.
*
* @param {number} speed - The speed value to convert.
* @param {UnitOptions} units - The target unit options.
* @returns {number} The converted speed.
*/
export const convertSpeed = (speed, units) => {
return convert(speed).from(DefaultUnits.speed).to(units.speed || DefaultUnits.speed);
};
/**
* Converts elevation from default units to the specified units.
*
* @param {number} elevation - The elevation value to convert.
* @param {UnitOptions} units - The target unit options.
* @returns {number} The converted elevation.
*/
export const convertElevation = (elevation, units) => {
return convert(elevation).from(DefaultUnits.elevation).to(units.elevation || DefaultUnits.elevation);
};
/**
* Converts altitude from default units to the specified units.
*
* @param {number} altitude - The altitude value to convert.
* @param {UnitOptions} units - The target unit options.
* @returns {number} The converted altitude.
*/
export const convertAltitude = (altitude, units) => {
return convert(altitude).from(DefaultUnits.altitude).to(units.altitude || DefaultUnits.altitude);
};
/**
* Converts temperature from default units to the specified units.
*
* @param {number} temperature - The temperature value to convert.
* @param {UnitOptions} units - The target unit options.
* @returns {number} The converted temperature.
*/
export const convertTemperature = (temperature, units) => {
return convert(temperature).from(DefaultUnits.temperature).to(units.temperature || DefaultUnits.temperature);
};
/**
* Converts pressure from default units to the specified units.
*
* @param {number} pressure - The pressure value to convert.
* @param {UnitOptions} units - The target unit options.
* @returns {number} The converted pressure.
*/
export const convertPressure = (pressure, units) => {
return convert(pressure).from(DefaultUnits.pressure).to(units.pressure || DefaultUnits.pressure);
};
/**
* Converts distance from default units to the specified units.
*
* @param {number} distance - The distance value to convert.
* @param {UnitOptions} units - The target unit options.
* @returns {number} The converted distance.
*/
export const convertDistance = (distance, units) => {
const from = DefaultUnits.distance;
const to = units.distance || DefaultUnits.distance;
if (from === to)
return distance;
// Convert from source to km as intermediate unit
const inKm = from === 'nmi' ? distance * NM_TO_KM : convert(distance).from(from).to('km');
// Convert from km to target unit
if (to === 'nmi')
return inKm / NM_TO_KM;
return convert(inKm).from('km').to(to);
};
/**
* Converts mass from default units to the specified units.
*
* @param {number} mass - The mass value to convert.
* @param {UnitOptions} units - The target unit options.
* @returns {number} The converted mass.
*/
export const convertMass = (mass, units) => {
return convert(mass).from(DefaultUnits.mass).to(units.mass || DefaultUnits.mass);
};
/**
* Converts volume from default units to the specified units.
*
* @param {number} volume - The volume value to convert.
* @param {UnitOptions} units - The target unit options.
* @returns {number} The converted volume.
*/
export const convertVolume = (volume, units) => {
return convert(volume).from(DefaultUnits.volume).to(units.volume || DefaultUnits.volume);
};