UNPKG

fly-js

Version:

A JavaScript utility library focusing on aviation

297 lines (259 loc) 10.6 kB
/** * Fly-js utility library - let's fly.....! * */ var Point = require('./src/Point'); var Latitude = require('./src/Latitude'); var Longitude = require('./src/Longitude'); var DistanceConverter = require('./src/helpers/converters/DistanceConverter'); var SpeedConverter = require('./src/helpers/converters/SpeedConverter'); var HeadAndCrossWindCalculator = require('./src/helpers/math/HeadAndCrossWindCalculator'); var WindTriangleCalculator = require('./src/helpers/math/WindTriangleCalculator'); var beaufortScale = require('./src/helpers/scales/Beaufort'); var windCardinalDirection = require('./src/helpers/scales/WindCardinalDirection'); var wakeLookup = require('./src/helpers/scales/Wake'); var flyjs = function () { }; /** * Return the distance between two points * * @param {Number} fromLat * @param {Number} fromLon * @param {Number} toLat * @param {Number} toLon * @param {Number} Number decimal places for rouding * @return {Number} Distance in nautical miles */ flyjs.distanceTo = function (fromLat, fromLon, toLat, toLon, roundTo) { var from = new Point(new Latitude(fromLat), new Longitude(fromLon)); var to = new Point(new Latitude(toLat), new Longitude(toLon)); return from.distanceTo(to, roundTo); }; /** * Return the distance between two points * * @param {Number} fromLat * @param {Number} fromLon * @param {Number} toLat * @param {Number} toLon * @param {Number} Number decimal places for rouding * @return {Number} Initial course in degree */ flyjs.trueCourse = function (fromLat, fromLon, toLat, toLon, roundTo) { var from = new Point(new Latitude(fromLat), new Longitude(fromLon)); var to = new Point(new Latitude(toLat), new Longitude(toLon)); return from.trueCourse(to, roundTo); }; /** * Return unit of measurement converted from nautical miles value * * @param {Number} unitOfMeasurement to convert to * @param {Number} unitValue is the nautical miles value one wishes to convert * @param {Number} Number decimal places for rouding * @return {Number} Unit of measurement converted from nautical miles value */ flyjs.nauticalMilesTo = function (unitOfMeasurement, unitValue, roundTo) { return DistanceConverter.nauticalMilesTo(unitOfMeasurement, unitValue, roundTo); }; /** * Return unit of measurement converted from miles value * * @param {Number} unitOfMeasurement to convert to * @param {Number} unitValue is the miles value one wishes to convert * @param {Number} Number decimal places for rouding * @return {Number} Unit of measurement converted from miles value */ flyjs.milesTo = function (unitOfMeasurement, unitValue, roundTo) { return DistanceConverter.milesTo(unitOfMeasurement, unitValue, roundTo); }; /** * Return unit of measurement converted from kilometres value * * @param {Number} unitOfMeasurement to convert to * @param {Number} unitValue is the kilometres value one wishes to convert * @param {Number} Number decimal places for rouding * @return {Number} Unit of measurement converted from kilometres value */ flyjs.kilometresTo = function (unitOfMeasurement, unitValue, roundTo) { return DistanceConverter.kilometresTo(unitOfMeasurement, unitValue, roundTo); }; /** * Return unit of measurement converted from knots value * * @param {Number} unitOfMeasurement to convert to * @param {Number} unitValue is the knots value one wishes to convert * @param {Number} Number decimal places for rouding * @return {Number} Unit of measurement converted from knots value */ flyjs.knotsTo = function (unitOfMeasurement, unitValue, roundTo) { return SpeedConverter.knotsTo(unitOfMeasurement, unitValue, roundTo); }; /** * Return unit of measurement converted from mps value * * @param {Number} unitOfMeasurement to convert to * @param {Number} unitValue is the mps value one wishes to convert * @param {Number} Number decimal places for rouding * @return {Number} Unit of measurement converted from mps value */ flyjs.mpsTo = function (unitOfMeasurement, unitValue, roundTo) { return SpeedConverter.mpsTo(unitOfMeasurement, unitValue, roundTo); }; /** * Return unit of measurement converted from knots value * * @param {Number} unitOfMeasurement to convert to * @param {Number} unitValue is the knots value one wishes to convert * @param {Number} Number decimal places for rouding * @return {Number} Unit of measurement converted from knots value */ flyjs.knotsTo = function (unitOfMeasurement, unitValue, roundTo) { return SpeedConverter.knotsTo(unitOfMeasurement, unitValue, roundTo); }; /** * Return unit of measurement converted from mps value * * @param {Number} unitOfMeasurement to convert to * @param {Number} unitValue is the mph value one wishes to convert * @param {Number} Number decimal places for rouding * @return {Number} Unit of measurement converted from knots value */ flyjs.mphTo = function (unitOfMeasurement, unitValue, roundTo) { return SpeedConverter.mphTo(unitOfMeasurement, unitValue, roundTo); }; /** * Calculates the Latitude and Longitude given a true course and distance from a given point * * @param {Number} fromLat * @param {Number} fromLon * @param {Number} trueCourse course in degrees * @param {Number} distance in nautical miles * @param {Number} roundTo decimal places for rouding * @return {Number} Unit of measurement converted from nautical miles value */ flyjs.enroute = function (fromLat, fromLon, trueCourse, distance, roundTo) { var from = new Point(new Latitude(fromLat), new Longitude(fromLon)); return from.enroute(trueCourse, distance, roundTo); }; /** * Lookup hepler for the Beaufort Scale * * @param {Number} wind value in Knotes * @param {String} key Value to retrieve options are All | Force Index | Description * @return {Number | String | Object} Force Index | Description | or both plus range data */ flyjs.beaufortLookup = function (wind, key) { return beaufortScale.lookup(wind, key); }; /** * Lookup hepler for the Aircraft Wake * * @param {Number} weight in kg * @return {String} ICAO Wake category */ flyjs.wakeLookup = function (weightOfAircraftKg) { return wakeLookup.lookup(weightOfAircraftKg); }; /** * Head wind calculator * * @param {Number} windSpeed value in Knotes * @param {Number} windDirection value in degrees * @param {Number} aircraftDirection value in degrees * @param {Number} roundTo decimal places for rouding * @return {Number| Object} Force Index | Description | or both plus range data */ flyjs.HeadWindCalculator = function (windSpeed, windDirection, aircraftDirection, roundTo) { HeadAndCrossWindCalculator.calculate(windSpeed, windDirection, aircraftDirection, roundTo); return HeadAndCrossWindCalculator.getHeadWind(); }; /** * Cross wind calculator * * @param {Number} windSpeed value in Knotes * @param {Number} windDirection value in degrees * @param {Number} aircraftDirection value in degrees * @param {Number} roundTo decimal places for rouding * @return {Number| Object} Force Index | Description | or both plus range data */ flyjs.CrossWindCalculator = function (windSpeed, windDirection, aircraftDirection, roundTo) { HeadAndCrossWindCalculator.calculate(windSpeed, windDirection, aircraftDirection, roundTo); return HeadAndCrossWindCalculator.getCrossWind(); }; /** * Cardinal Wind Directoion (Wind rose) * * @param {Number} windDirection value in degrees * @return {String} Cardinal Directoion e.g. 330 degrees equals NNW (North North West) */ flyjs.CardinalWindDirection = function (windDirection) { return windCardinalDirection.lookup(windDirection); }; /** * Calculate the interecting point of two great circles * * @param {Number} lat1 Description latitude value * @param {Number} lon1 Description longitude value * @param {Number} course1 Course in degrees * @param {Number} lat2 Description latitude value * @param {Number} lon2 Decimal longitude value * @param {Number} course2 Course in degrees * @return {Point} Point at which the two radials intersect */ flyjs.intersectionPoint = function (lat1, lon1, course1, lat2, lon2, course2) { var point1 = new Point(new Latitude(lat1), new Longitude(lon1), course1); var point2 = new Point(new Latitude(lat2), new Longitude(lon2), course2); return point1.intersectionPoint(point2); }; /** * Wind direction and speed calculation given true air speed, ground speed, course and heading * * @param {Number} trueAirSpeed True airspeed * @param {Number} groundSpeed Ground speed * @param {Number} heading Heading in degrees * @param {Number} course Course in degrees * @param {Number} roundTo decimal places for rouding * @return {WindSpeed and Direction} Wind speed and Direction */ flyjs.calculateWindSpeedAndDirection = function (trueAirSpeed, groundSpeed, heading, course, roundTo) { WindTriangleCalculator.calculateWindSpeedAndDirection(trueAirSpeed, groundSpeed, heading, course, roundTo); return { windSpeed: WindTriangleCalculator.getWindSpeed(), windDirection: WindTriangleCalculator.getWindDirection() }; }; /** * Course and Ground Speed calculation given true air speed, ground speed, course and heading * * @param {Number} trueAirSpeed True airspeed * @param {Number} heading Heading in degrees * @param {Number} windSpeed Wind speed in knots * @param {Number} windDirection Wind direction in degrees * @param {Number} roundTo Decimal places for rouding * @return {WindSpeed and Direction} Wind speed and Direction */ flyjs.calculateHeadingAndGroundSpeed = function (trueAirSpeed, course, windSpeed, windDirection, roundTo) { WindTriangleCalculator.calculateHeadingAndGroundSpeed(trueAirSpeed, heading, windSpeed, windDirection, roundTo); return { heading: WindTriangleCalculator.getHeading(), groundSpeed: WindTriangleCalculator.getGroundSpeed() }; }; /** * Course and Ground Speed calculation given true air speed, ground speed, course and heading * * @param {Number} trueAirSpeed True airspeed * @param {Number} heading Heading in degrees * @param {Number} windSpeed Wind speed in knots * @param {Number} windDirection Wind direction in degrees * @param {Number} roundTo Decimal places for rouding * @return {WindSpeed and Direction} Wind speed and Direction */ flyjs.calculateCourseAndGroundSpeed = function (trueAirSpeed, heading, windSpeed, windDirection, roundTo) { WindTriangleCalculator.calculateCourseAndGroundSpeed(trueAirSpeed, heading, windSpeed, windDirection, roundTo); return { course: WindTriangleCalculator.getCourse(), groundSpeed: WindTriangleCalculator.getGroundSpeed() }; }; module.exports = flyjs;