UNPKG

location-utilities

Version:

Coordinate formatting, location calculation utilities, and NMEA sentence parser.

606 lines 52.8 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var LocationUtility; (function (LocationUtility) { // Accepts standard NMEA sentences and returns an object with the parsed data function parseNMEA(sentence, unit) { if (sentence !== undefined && sentence !== null) { var nmea = sentence.toString(); var nmeaParsed = nmea.split(","); var parsedSentence = {}; // Finds correct nmea sentence and parses it if (nmeaParsed[0].includes("DTM")) { var lastItem = (nmeaParsed[8] !== null && nmeaParsed[8] !== undefined && nmeaParsed[8] !== '') ? nmeaParsed[8].split('*') : ''; parsedSentence = { type: (nmeaParsed[0] !== null && nmeaParsed[0] !== undefined && nmeaParsed[0] !== '') ? nmeaParsed[0] : '', datum: (nmeaParsed[1] !== null && nmeaParsed[1] !== undefined && nmeaParsed[1] !== '') ? nmeaParsed[1] : '', subDatum: (nmeaParsed[2] !== null && nmeaParsed[2] !== undefined && nmeaParsed[2] !== '') ? nmeaParsed[2] : '', latitudeOffset: (nmeaParsed[3] !== null && nmeaParsed[3] !== undefined && nmeaParsed[3] !== '') ? parseFloat(nmeaParsed[3]) : 0, latitudeDirection: (nmeaParsed[4] !== null && nmeaParsed[4] !== undefined && nmeaParsed[4] !== '') ? nmeaParsed[4] : '', longitudeOffset: (nmeaParsed[5] !== null && nmeaParsed[5] !== undefined && nmeaParsed[5] !== '') ? parseFloat(nmeaParsed[5]) : 0, longitudeDirection: (nmeaParsed[6] !== null && nmeaParsed[6] !== undefined && nmeaParsed[6] !== '') ? nmeaParsed[6] : '', altitudeOffset: (nmeaParsed[7] !== null && nmeaParsed[7] !== undefined && nmeaParsed[7] !== '') ? parseFloat(nmeaParsed[7]) : 0, refDatum: (nmeaParsed[8] !== null && nmeaParsed[8] !== undefined && nmeaParsed[8] !== '') ? lastItem[0] : '' }; } else if (nmeaParsed[0].includes("GBS")) { var lastItem = (nmeaParsed[8] !== null && nmeaParsed[8] !== undefined && nmeaParsed[8] !== '') ? nmeaParsed[8].split('*') : 0; parsedSentence = { type: (nmeaParsed[0] !== null && nmeaParsed[0] !== undefined && nmeaParsed[0] !== '') ? nmeaParsed[0] : '', time: (nmeaParsed[1] !== null && nmeaParsed[1] !== undefined && nmeaParsed[1] !== '') ? Number(nmeaParsed[1]) : 0, latitudeError: (nmeaParsed[2] !== null && nmeaParsed[2] !== undefined && nmeaParsed[2] !== '') ? parseFloat(nmeaParsed[2]) : 0, longitudeError: (nmeaParsed[3] !== null && nmeaParsed[3] !== undefined && nmeaParsed[3] !== '') ? parseFloat(nmeaParsed[3]) : 0, altitudeError: (nmeaParsed[4] !== null && nmeaParsed[4] !== undefined && nmeaParsed[4] !== '') ? parseFloat(nmeaParsed[4]) : 0, failedSatelliteID: (nmeaParsed[5] !== null && nmeaParsed[5] !== undefined && nmeaParsed[5] !== '') ? parseFloat(nmeaParsed[5]) : 0, probability: (nmeaParsed[6] !== null && nmeaParsed[6] !== undefined && nmeaParsed[6] !== '') ? parseFloat(nmeaParsed[6]) : 0, bias: (nmeaParsed[7] !== null && nmeaParsed[7] !== undefined && nmeaParsed[7] !== '') ? parseFloat(nmeaParsed[7]) : 0, standardDeviationOfBias: (nmeaParsed[8] !== null && nmeaParsed[8] !== undefined && nmeaParsed[8] !== '') ? parseFloat(lastItem[0]) : 0 }; } else if (nmeaParsed[0].includes("GGA")) { var lastItem = (nmeaParsed[14] !== null && nmeaParsed[14] !== undefined && nmeaParsed[14] !== '') ? nmeaParsed[14].split('*') : 0; parsedSentence = { type: (nmeaParsed[0] !== null && nmeaParsed[0] !== undefined && nmeaParsed[0] !== '') ? nmeaParsed[0] : '', time: (nmeaParsed[1] !== null && nmeaParsed[1] !== undefined && nmeaParsed[1] !== '') ? Number(nmeaParsed[1]) : 0, latitude: (nmeaParsed[2] !== null && nmeaParsed[2] !== undefined && nmeaParsed[2] !== '') ? DMLatToDD(nmeaParsed[3], nmeaParsed[2]) : 0, latitudeDirection: (nmeaParsed[3] !== null && nmeaParsed[3] !== undefined && nmeaParsed[3] !== '') ? nmeaParsed[3] : '', longitude: (nmeaParsed[4] !== null && nmeaParsed[4] !== undefined && nmeaParsed[4] !== '') ? DMLongToDD(nmeaParsed[5], nmeaParsed[4]) : 0, longitudeDirection: (nmeaParsed[5] !== null && nmeaParsed[5] !== undefined && nmeaParsed[5] !== '') ? nmeaParsed[5] : '', quality: (nmeaParsed[6] !== null && nmeaParsed[6] !== undefined && nmeaParsed[6] !== '') ? parseFloat(nmeaParsed[6]) : 0, satelliteCount: (nmeaParsed[7] !== null && nmeaParsed[7] !== undefined && nmeaParsed[7] !== '') ? parseFloat(nmeaParsed[7]) : 0, HDOP: (nmeaParsed[8] !== null && nmeaParsed[8] !== undefined && nmeaParsed[8] !== '') ? parseFloat(nmeaParsed[8]) : 0, altitude: (nmeaParsed[9] !== null && nmeaParsed[9] !== undefined && nmeaParsed[9] !== '') ? convertAlt(nmeaParsed[9], unit) : 0, altitudeUnits: (nmeaParsed[10] !== null && nmeaParsed[10] !== undefined && nmeaParsed[10] !== '') ? nmeaParsed[10] : '', GeoidSeparation: (nmeaParsed[11] !== null && nmeaParsed[11] !== undefined && nmeaParsed[11] !== '') ? parseFloat(nmeaParsed[11]) : 0, GeoidSeparationUnits: (nmeaParsed[12] !== null && nmeaParsed[12] !== undefined && nmeaParsed[12] !== '') ? nmeaParsed[12] : '', ageOfDifferential: (nmeaParsed[13] !== null && nmeaParsed[13] !== undefined && nmeaParsed[13] !== '') ? parseFloat(nmeaParsed[13]) : 0, ageOfDifferentialStation: (nmeaParsed[14] !== null && nmeaParsed[14] !== undefined && nmeaParsed[14] !== '') ? parseFloat(lastItem[0]) : 0 }; } else if (nmeaParsed[0].includes("GLL")) { var lastItem = (nmeaParsed[7] !== null && nmeaParsed[7] !== undefined && nmeaParsed[7] !== '') ? nmeaParsed[7].split('*') : ''; parsedSentence = { type: (nmeaParsed[0] !== null && nmeaParsed[0] !== undefined && nmeaParsed[0] !== '') ? nmeaParsed[0] : '', latitude: (nmeaParsed[1] !== null && nmeaParsed[1] !== undefined && nmeaParsed[1] !== '') ? DMLatToDD(nmeaParsed[2], nmeaParsed[1]) : 0, latitudeDirection: (nmeaParsed[2] !== null && nmeaParsed[2] !== undefined && nmeaParsed[2] !== '') ? nmeaParsed[2] : '', longitude: (nmeaParsed[3] !== null && nmeaParsed[3] !== undefined && nmeaParsed[3] !== '') ? DMLongToDD(nmeaParsed[4], nmeaParsed[3]) : 0, longitudeDirection: (nmeaParsed[4] !== null && nmeaParsed[4] !== undefined && nmeaParsed[4] !== '') ? nmeaParsed[4] : '', time: (nmeaParsed[5] !== null && nmeaParsed[5] !== undefined && nmeaParsed[5] !== '') ? Number(nmeaParsed[5]) : 0, status: (nmeaParsed[6] !== null && nmeaParsed[6] !== undefined && nmeaParsed[6] !== '') ? nmeaParsed[6] : '', positionMode: (nmeaParsed[7] !== null && nmeaParsed[7] !== undefined && nmeaParsed[7] !== '') ? lastItem[7] : '' }; } else if (nmeaParsed[0].includes("GLQ")) { var lastItem = (nmeaParsed[1] !== null && nmeaParsed[1] !== undefined && nmeaParsed[1] !== '') ? nmeaParsed[1].split('*') : ''; parsedSentence = { type: (nmeaParsed[0] !== null && nmeaParsed[0] !== undefined && nmeaParsed[0] !== '') ? nmeaParsed[0] : '', messageID: (nmeaParsed[1] !== null && nmeaParsed[1] !== undefined && nmeaParsed[1] !== '') ? lastItem[0] : '' }; } else if (nmeaParsed[0].includes("GNQ")) { var lastItem = (nmeaParsed[1] !== null && nmeaParsed[1] !== undefined && nmeaParsed[1] !== '') ? nmeaParsed[1].split('*') : ''; parsedSentence = { type: (nmeaParsed[0] !== null && nmeaParsed[0] !== undefined && nmeaParsed[0] !== '') ? nmeaParsed[0] : '', messageID: (nmeaParsed[1] !== null && nmeaParsed[1] !== undefined && nmeaParsed[1] !== '') ? lastItem[0] : '' }; } else if (nmeaParsed[0].includes("GNS")) { var lastItem = (nmeaParsed[12] !== null && nmeaParsed[12] !== undefined && nmeaParsed[12] !== '') ? nmeaParsed[12].split('*') : 0; parsedSentence = { type: (nmeaParsed[0] !== null && nmeaParsed[0] !== undefined && nmeaParsed[0] !== '') ? nmeaParsed[0] : '', time: (nmeaParsed[1] !== null && nmeaParsed[1] !== undefined && nmeaParsed[1] !== '') ? Number(nmeaParsed[1]) : 0, latitude: (nmeaParsed[2] !== null && nmeaParsed[2] !== undefined && nmeaParsed[2] !== '') ? DMLatToDD(nmeaParsed[3], nmeaParsed[2]) : 0, latitudeDirection: (nmeaParsed[3] !== null && nmeaParsed[3] !== undefined && nmeaParsed[3] !== '') ? nmeaParsed[3] : '', longitude: (nmeaParsed[4] !== null && nmeaParsed[4] !== undefined && nmeaParsed[4] !== '') ? DMLongToDD(nmeaParsed[5], nmeaParsed[4]) : 0, longitudeDirection: (nmeaParsed[5] !== null && nmeaParsed[5] !== undefined && nmeaParsed[5] !== '') ? nmeaParsed[5] : '', positionMode: (nmeaParsed[6] !== null && nmeaParsed[6] !== undefined && nmeaParsed[6] !== '') ? nmeaParsed[6] : '', satelliteCount: (nmeaParsed[7] !== null && nmeaParsed[7] !== undefined && nmeaParsed[7] !== '') ? parseFloat(nmeaParsed[7]) : 0, HDOP: (nmeaParsed[8] !== null && nmeaParsed[8] !== undefined && nmeaParsed[8] !== '') ? parseFloat(nmeaParsed[8]) : 0, altitude: (nmeaParsed[9] !== null && nmeaParsed[9] !== undefined && nmeaParsed[9] !== '') ? parseFloat(nmeaParsed[9]) : 0, GeoidSeparation: (nmeaParsed[10] !== null && nmeaParsed[10] !== undefined && nmeaParsed[10] !== '') ? parseFloat(nmeaParsed[10]) : 0, ageOfDifferential: (nmeaParsed[11] !== null && nmeaParsed[11] !== undefined && nmeaParsed[11] !== '') ? parseFloat(nmeaParsed[11]) : 0, ageOfDifferentialStation: (nmeaParsed[12] !== null && nmeaParsed[12] !== undefined && nmeaParsed[12] !== '') ? parseFloat(lastItem[0]) : 0 }; } else if (nmeaParsed[0].includes("GPQ")) { var lastItem = (nmeaParsed[1] !== null && nmeaParsed[1] !== undefined && nmeaParsed[1] !== '') ? nmeaParsed[1].split('*') : ''; parsedSentence = { type: (nmeaParsed[0] !== null && nmeaParsed[0] !== undefined && nmeaParsed[0] !== '') ? nmeaParsed[0] : '', messageID: (nmeaParsed[1] !== null && nmeaParsed[1] !== undefined && nmeaParsed[1] !== '') ? lastItem[0] : '' }; } else if (nmeaParsed[0].includes("GRS")) { var lastItem = (nmeaParsed[14] !== null && nmeaParsed[14] !== undefined && nmeaParsed[14] !== '') ? nmeaParsed[14].split('*') : ''; parsedSentence = { type: (nmeaParsed[0] !== null && nmeaParsed[0] !== undefined && nmeaParsed[0] !== '') ? nmeaParsed[0] : '', time: (nmeaParsed[1] !== null && nmeaParsed[1] !== undefined && nmeaParsed[1] !== '') ? Number(nmeaParsed[1]) : 0, mode: (nmeaParsed[2] !== null && nmeaParsed[2] !== undefined && nmeaParsed[2] !== '') ? parseFloat(nmeaParsed[2]) : 0, residual: (nmeaParsed[3] !== null && nmeaParsed[3] !== undefined && nmeaParsed[3] !== '') ? [nmeaParsed[3], nmeaParsed[4], nmeaParsed[5], nmeaParsed[6], nmeaParsed[7], nmeaParsed[8], nmeaParsed[9], nmeaParsed[10], nmeaParsed[11], nmeaParsed[12], nmeaParsed[13], lastItem[0]] : '' }; } else if (nmeaParsed[0].includes("GSA")) { var lastItem = (nmeaParsed[17] !== null && nmeaParsed[17] !== undefined && nmeaParsed[17] !== '') ? nmeaParsed[17].split('*') : 0; parsedSentence = { type: (nmeaParsed[0] !== null && nmeaParsed[0] !== undefined && nmeaParsed[0] !== '') ? nmeaParsed[0] : '', operationMode: (nmeaParsed[1] !== null && nmeaParsed[1] !== undefined && nmeaParsed[1] !== '') ? nmeaParsed[1] : '', navigationMode: (nmeaParsed[2] !== null && nmeaParsed[2] !== undefined && nmeaParsed[2] !== '') ? parseFloat(nmeaParsed[2]) : 0, satelliteNumber: (nmeaParsed[3] !== null && nmeaParsed[3] !== undefined && nmeaParsed[3] !== '') ? [nmeaParsed[3], nmeaParsed[4], nmeaParsed[5], nmeaParsed[6], nmeaParsed[7], nmeaParsed[8], nmeaParsed[9], nmeaParsed[10], nmeaParsed[11], nmeaParsed[12], nmeaParsed[13], nmeaParsed[14]] : '', PDOP: (nmeaParsed[15] !== null && nmeaParsed[15] !== undefined && nmeaParsed[15] !== '') ? parseFloat(nmeaParsed[15]) : 0, HDOP: (nmeaParsed[16] !== null && nmeaParsed[16] !== undefined && nmeaParsed[16] !== '') ? parseFloat(nmeaParsed[16]) : 0, VDOP: (nmeaParsed[17] !== null && nmeaParsed[17] !== undefined && nmeaParsed[17] !== '') ? parseFloat(lastItem[0]) : 0 }; } else if (nmeaParsed[0].includes("GST")) { var lastItem = (nmeaParsed[8] !== null && nmeaParsed[8] !== undefined && nmeaParsed[8] !== '') ? nmeaParsed[8].split('*') : 0; parsedSentence = { type: (nmeaParsed[0] !== null && nmeaParsed[0] !== undefined && nmeaParsed[0] !== '') ? nmeaParsed[0] : '', time: (nmeaParsed[1] !== null && nmeaParsed[1] !== undefined && nmeaParsed[1] !== '') ? Number(nmeaParsed[1]) : 0, rangeRMS: (nmeaParsed[2] !== null && nmeaParsed[2] !== undefined && nmeaParsed[2] !== '') ? parseFloat(nmeaParsed[2]) : 0, stdMajor: (nmeaParsed[3] !== null && nmeaParsed[3] !== undefined && nmeaParsed[3] !== '') ? parseFloat(nmeaParsed[3]) : 0, stdMinor: (nmeaParsed[4] !== null && nmeaParsed[4] !== undefined && nmeaParsed[4] !== '') ? parseFloat(nmeaParsed[4]) : 0, orientation: (nmeaParsed[5] !== null && nmeaParsed[5] !== undefined && nmeaParsed[5] !== '') ? parseFloat(nmeaParsed[5]) : 0, stdLatitudeError: (nmeaParsed[6] !== null && nmeaParsed[6] !== undefined && nmeaParsed[6] !== '') ? parseFloat(nmeaParsed[6]) : 0, stdLongitudeError: (nmeaParsed[7] !== null && nmeaParsed[7] !== undefined && nmeaParsed[7] !== '') ? parseFloat(nmeaParsed[7]) : 0, stdAltitudeError: (nmeaParsed[8] !== null && nmeaParsed[8] !== undefined && nmeaParsed[8] !== '') ? parseFloat(lastItem[0]) : 0 }; } else if (nmeaParsed[0].includes("GSV")) { var lastItem = (nmeaParsed[19] !== null && nmeaParsed[19] !== undefined && nmeaParsed[19] !== '') ? nmeaParsed[19].split('*') : ''; parsedSentence = { type: (nmeaParsed[0] !== null && nmeaParsed[0] !== undefined && nmeaParsed[0] !== '') ? nmeaParsed[0] : '', numberOfMessages: (nmeaParsed[1] !== null && nmeaParsed[1] !== undefined && nmeaParsed[1] !== '') ? parseFloat(nmeaParsed[1]) : 0, messageNumber: (nmeaParsed[2] !== null && nmeaParsed[2] !== undefined && nmeaParsed[2] !== '') ? parseFloat(nmeaParsed[2]) : 0, satellitesInView: (nmeaParsed[3] !== null && nmeaParsed[3] !== undefined && nmeaParsed[3] !== '') ? parseFloat(nmeaParsed[3]) : 0, satelliteIDs: (nmeaParsed[4] !== null && nmeaParsed[4] !== undefined && nmeaParsed[4] !== '') ? [nmeaParsed[4], nmeaParsed[5], nmeaParsed[6], nmeaParsed[7]] : '', elevations: (nmeaParsed[8] !== null && nmeaParsed[8] !== undefined && nmeaParsed[8] !== '') ? [nmeaParsed[8], nmeaParsed[9], nmeaParsed[10], nmeaParsed[11]] : '', azimuth: (nmeaParsed[12] !== null && nmeaParsed[12] !== undefined && nmeaParsed[12] !== '') ? [nmeaParsed[12], nmeaParsed[13], nmeaParsed[14], nmeaParsed[15]] : '', signalStrengths: (nmeaParsed[0] !== null && nmeaParsed[16] !== undefined && nmeaParsed[16] !== '') ? [nmeaParsed[16], nmeaParsed[17], nmeaParsed[18], lastItem[0]] : '' }; } else if (nmeaParsed[0].includes("RMC")) { var lastItem = (nmeaParsed[12] !== null && nmeaParsed[12] !== undefined && nmeaParsed[12] !== '') ? nmeaParsed[12].split('*') : ''; parsedSentence = { type: (nmeaParsed[0] !== null && nmeaParsed[0] !== undefined && nmeaParsed[0] !== '') ? nmeaParsed[0] : '', time: (nmeaParsed[1] !== null && nmeaParsed[1] !== undefined && nmeaParsed[1] !== '') ? Number(nmeaParsed[1]) : 0, status: (nmeaParsed[2] !== null && nmeaParsed[2] !== undefined && nmeaParsed[2] !== '') ? nmeaParsed[2] : '', latitude: (nmeaParsed[3] !== null && nmeaParsed[3] !== undefined && nmeaParsed[3] !== '') ? DMLatToDD(nmeaParsed[4], nmeaParsed[3]) : 0, latitudeDirection: (nmeaParsed[4] !== null && nmeaParsed[4] !== undefined && nmeaParsed[4] !== '') ? nmeaParsed[4] : '', longitude: (nmeaParsed[5] !== null && nmeaParsed[5] !== undefined && nmeaParsed[5] !== '') ? DMLongToDD(nmeaParsed[6], nmeaParsed[5]) : 0, longitudeDirection: (nmeaParsed[6] !== null && nmeaParsed[6] !== undefined && nmeaParsed[6] !== '') ? nmeaParsed[6] : '', speed: (nmeaParsed[7] !== null && nmeaParsed[7] !== undefined && nmeaParsed[7] !== '') ? parseFloat(nmeaParsed[7]) : 0, course: (nmeaParsed[8] !== null && nmeaParsed[8] !== undefined && nmeaParsed[8] !== '') ? parseFloat(nmeaParsed[8]) : 0, date: (nmeaParsed[9] !== null && nmeaParsed[9] !== undefined && nmeaParsed[9] !== '') ? Number(nmeaParsed[9]) : 0, magneticVariation: (nmeaParsed[10] !== null && nmeaParsed[10] !== undefined && nmeaParsed[10] !== '') ? parseFloat(nmeaParsed[10]) : 0, magneticVariationDirection: (nmeaParsed[11] !== null && nmeaParsed[11] !== undefined && nmeaParsed[11] !== '') ? nmeaParsed[10] : '', positionMode: (nmeaParsed[12] !== null && nmeaParsed[12] !== undefined && nmeaParsed[12] !== '') ? lastItem[0] : '' }; } else if (nmeaParsed[0].includes("VTG")) { var lastItem = (nmeaParsed[9] !== null && nmeaParsed[9] !== undefined && nmeaParsed[9] !== '') ? nmeaParsed[9].split('*') : ''; parsedSentence = { type: (nmeaParsed[0] !== null && nmeaParsed[0] !== undefined && nmeaParsed[0] !== '') ? nmeaParsed[0] : '', courseOverGround: (nmeaParsed[1] !== null && nmeaParsed[1] !== undefined && nmeaParsed[1] !== '') ? parseFloat(nmeaParsed[1]) : 0, fixedField: (nmeaParsed[2] !== null && nmeaParsed[2] !== undefined && nmeaParsed[2] !== '') ? nmeaParsed[2] : '', courseOverGroundMagnetic: (nmeaParsed[3] !== null && nmeaParsed[3] !== undefined && nmeaParsed[3] !== '') ? parseFloat(nmeaParsed[3]) : 0, fixedFieldMagnetic: (nmeaParsed[4] !== null && nmeaParsed[4] !== undefined && nmeaParsed[4] !== '') ? nmeaParsed[4] : '', speedOverGround: (nmeaParsed[5] !== null && nmeaParsed[5] !== undefined && nmeaParsed[5] !== '') ? parseFloat(nmeaParsed[5]) : 0, fixedFieldKnots: (nmeaParsed[6] !== null && nmeaParsed[6] !== undefined && nmeaParsed[6] !== '') ? nmeaParsed[6] : '', speedOverGroundMetric: (nmeaParsed[7] !== null && nmeaParsed[7] !== undefined && nmeaParsed[7] !== '') ? parseFloat(nmeaParsed[7]) : 0, fixedFieldKMH: (nmeaParsed[8] !== null && nmeaParsed[8] !== undefined && nmeaParsed[8] !== '') ? nmeaParsed[8] : '', positionMode: (nmeaParsed[9] !== null && nmeaParsed[9] !== undefined && nmeaParsed[9] !== '') ? lastItem[0] : '' }; } else if (nmeaParsed[0].includes("ZDA")) { var lastItem = (nmeaParsed[6] !== null && nmeaParsed[6] !== undefined && nmeaParsed[6] !== '') ? nmeaParsed[6].split('*') : 0; parsedSentence = { type: (nmeaParsed[0] !== null && nmeaParsed[0] !== undefined && nmeaParsed[0] !== '') ? nmeaParsed[0] : '', time: (nmeaParsed[1] !== null && nmeaParsed[1] !== undefined && nmeaParsed[1] !== '') ? Number(nmeaParsed[1]) : 0, day: (nmeaParsed[2] !== null && nmeaParsed[2] !== undefined && nmeaParsed[2] !== '') ? Number(nmeaParsed[2]) : 0, month: (nmeaParsed[3] !== null && nmeaParsed[3] !== undefined && nmeaParsed[3] !== '') ? Number(nmeaParsed[3]) : 0, year: (nmeaParsed[4] !== null && nmeaParsed[4] !== undefined && nmeaParsed[4] !== '') ? Number(nmeaParsed[4]) : 0, localTimeHours: (nmeaParsed[5] !== null && nmeaParsed[5] !== undefined && nmeaParsed[5] !== '') ? Number(nmeaParsed[5]) : 0, localTimeMinutes: (nmeaParsed[6] !== null && nmeaParsed[6] !== undefined && nmeaParsed[6] !== '') ? Number(lastItem[0]) : 0 }; } return parsedSentence; } else { return "Invalid NMEA sentence."; } } LocationUtility.parseNMEA = parseNMEA; // Parses DTM string function parseDTM(sentence, unit) { if (sentence !== undefined && sentence !== null) { var nmea = sentence.toString(); var nmeaParsed = nmea.split(","); var parsedSentence; var lastItem = (nmeaParsed[8] !== null && nmeaParsed[8] !== undefined && nmeaParsed[8] !== '') ? nmeaParsed[8].split('*') : ''; parsedSentence = { type: (nmeaParsed[0] !== null && nmeaParsed[0] !== undefined && nmeaParsed[0] !== '') ? nmeaParsed[0] : '', datum: (nmeaParsed[1] !== null && nmeaParsed[1] !== undefined && nmeaParsed[1] !== '') ? nmeaParsed[1] : '', subDatum: (nmeaParsed[2] !== null && nmeaParsed[2] !== undefined && nmeaParsed[2] !== '') ? nmeaParsed[2] : '', latitudeOffset: (nmeaParsed[3] !== null && nmeaParsed[3] !== undefined && nmeaParsed[3] !== '') ? parseFloat(nmeaParsed[3]) : 0, latitudeDirection: (nmeaParsed[4] !== null && nmeaParsed[4] !== undefined && nmeaParsed[4] !== '') ? nmeaParsed[4] : '', longitudeOffset: (nmeaParsed[5] !== null && nmeaParsed[5] !== undefined && nmeaParsed[5] !== '') ? parseFloat(nmeaParsed[5]) : 0, longitudeDirection: (nmeaParsed[6] !== null && nmeaParsed[6] !== undefined && nmeaParsed[6] !== '') ? nmeaParsed[6] : '', altitudeOffset: (nmeaParsed[7] !== null && nmeaParsed[7] !== undefined && nmeaParsed[7] !== '') ? parseFloat(nmeaParsed[7]) : 0, refDatum: (nmeaParsed[8] !== null && nmeaParsed[8] !== undefined && nmeaParsed[8] !== '') ? lastItem[0] : '' }; return parsedSentence; } } LocationUtility.parseDTM = parseDTM; // Parses GBS string function parseGBS(sentence, unit) { if (sentence !== undefined && sentence !== null) { var nmea = sentence.toString(); var nmeaParsed = nmea.split(","); var parsedSentence; var lastItem = (nmeaParsed[8] !== null && nmeaParsed[8] !== undefined && nmeaParsed[8] !== '') ? nmeaParsed[8].split('*') : 0; parsedSentence = { type: (nmeaParsed[0] !== null && nmeaParsed[0] !== undefined && nmeaParsed[0] !== '') ? nmeaParsed[0] : '', time: (nmeaParsed[1] !== null && nmeaParsed[1] !== undefined && nmeaParsed[1] !== '') ? Number(nmeaParsed[1]) : 0, latitudeError: (nmeaParsed[2] !== null && nmeaParsed[2] !== undefined && nmeaParsed[2] !== '') ? parseFloat(nmeaParsed[2]) : 0, longitudeError: (nmeaParsed[3] !== null && nmeaParsed[3] !== undefined && nmeaParsed[3] !== '') ? parseFloat(nmeaParsed[3]) : 0, altitudeError: (nmeaParsed[4] !== null && nmeaParsed[4] !== undefined && nmeaParsed[4] !== '') ? parseFloat(nmeaParsed[4]) : 0, failedSatelliteID: (nmeaParsed[5] !== null && nmeaParsed[5] !== undefined && nmeaParsed[5] !== '') ? parseFloat(nmeaParsed[5]) : 0, probability: (nmeaParsed[6] !== null && nmeaParsed[6] !== undefined && nmeaParsed[6] !== '') ? parseFloat(nmeaParsed[6]) : 0, bias: (nmeaParsed[7] !== null && nmeaParsed[7] !== undefined && nmeaParsed[7] !== '') ? parseFloat(nmeaParsed[7]) : 0, standardDeviationOfBias: (nmeaParsed[8] !== null && nmeaParsed[8] !== undefined && nmeaParsed[8] !== '') ? parseFloat(lastItem[0]) : 0 }; return parsedSentence; } } LocationUtility.parseGBS = parseGBS; // Parses GGA string function parseGGA(sentence, unit) { if (sentence !== undefined && sentence !== null) { var nmea = sentence.toString(); var nmeaParsed = nmea.split(","); var parsedSentence; var lastItem = (nmeaParsed[14] !== null && nmeaParsed[14] !== undefined && nmeaParsed[14] !== '') ? nmeaParsed[14].split('*') : 0; parsedSentence = { type: (nmeaParsed[0] !== null && nmeaParsed[0] !== undefined && nmeaParsed[0] !== '') ? nmeaParsed[0] : '', time: (nmeaParsed[1] !== null && nmeaParsed[1] !== undefined && nmeaParsed[1] !== '') ? Number(nmeaParsed[1]) : 0, latitude: (nmeaParsed[2] !== null && nmeaParsed[2] !== undefined && nmeaParsed[2] !== '') ? DMLatToDD(nmeaParsed[3], nmeaParsed[2]) : 0, latitudeDirection: (nmeaParsed[3] !== null && nmeaParsed[3] !== undefined && nmeaParsed[3] !== '') ? nmeaParsed[3] : '', longitude: (nmeaParsed[4] !== null && nmeaParsed[4] !== undefined && nmeaParsed[4] !== '') ? DMLongToDD(nmeaParsed[5], nmeaParsed[4]) : 0, longitudeDirection: (nmeaParsed[5] !== null && nmeaParsed[5] !== undefined && nmeaParsed[5] !== '') ? nmeaParsed[5] : '', quality: (nmeaParsed[6] !== null && nmeaParsed[6] !== undefined && nmeaParsed[6] !== '') ? parseFloat(nmeaParsed[6]) : 0, satelliteCount: (nmeaParsed[7] !== null && nmeaParsed[7] !== undefined && nmeaParsed[7] !== '') ? parseFloat(nmeaParsed[7]) : 0, HDOP: (nmeaParsed[8] !== null && nmeaParsed[8] !== undefined && nmeaParsed[8] !== '') ? parseFloat(nmeaParsed[8]) : 0, altitude: (nmeaParsed[9] !== null && nmeaParsed[9] !== undefined && nmeaParsed[9] !== '') ? convertAlt(nmeaParsed[9], unit) : 0, altitudeUnits: (nmeaParsed[10] !== null && nmeaParsed[10] !== undefined && nmeaParsed[10] !== '') ? nmeaParsed[10] : '', GeoidSeparation: (nmeaParsed[11] !== null && nmeaParsed[11] !== undefined && nmeaParsed[11] !== '') ? parseFloat(nmeaParsed[11]) : 0, GeoidSeparationUnits: (nmeaParsed[12] !== null && nmeaParsed[12] !== undefined && nmeaParsed[12] !== '') ? nmeaParsed[12] : '', ageOfDifferential: (nmeaParsed[13] !== null && nmeaParsed[13] !== undefined && nmeaParsed[13] !== '') ? parseFloat(nmeaParsed[13]) : 0, ageOfDifferentialStation: (nmeaParsed[14] !== null && nmeaParsed[14] !== undefined && nmeaParsed[14] !== '') ? parseFloat(lastItem[0]) : 0 }; return parsedSentence; } } LocationUtility.parseGGA = parseGGA; // Parses GLL string function parseGLL(sentence, unit) { if (sentence !== undefined && sentence !== null) { var nmea = sentence.toString(); var nmeaParsed = nmea.split(","); var parsedSentence; var lastItem = (nmeaParsed[7] !== null && nmeaParsed[7] !== undefined && nmeaParsed[7] !== '') ? nmeaParsed[7].split('*') : ''; parsedSentence = { type: (nmeaParsed[0] !== null && nmeaParsed[0] !== undefined && nmeaParsed[0] !== '') ? nmeaParsed[0] : '', latitude: (nmeaParsed[1] !== null && nmeaParsed[1] !== undefined && nmeaParsed[1] !== '') ? DMLatToDD(nmeaParsed[2], nmeaParsed[1]) : 0, latitudeDirection: (nmeaParsed[2] !== null && nmeaParsed[2] !== undefined && nmeaParsed[2] !== '') ? nmeaParsed[2] : '', longitude: (nmeaParsed[3] !== null && nmeaParsed[3] !== undefined && nmeaParsed[3] !== '') ? DMLongToDD(nmeaParsed[4], nmeaParsed[3]) : 0, longitudeDirection: (nmeaParsed[4] !== null && nmeaParsed[4] !== undefined && nmeaParsed[4] !== '') ? nmeaParsed[4] : '', time: (nmeaParsed[5] !== null && nmeaParsed[5] !== undefined && nmeaParsed[5] !== '') ? Number(nmeaParsed[5]) : 0, status: (nmeaParsed[6] !== null && nmeaParsed[6] !== undefined && nmeaParsed[6] !== '') ? nmeaParsed[6] : '', positionMode: (nmeaParsed[7] !== null && nmeaParsed[7] !== undefined && nmeaParsed[7] !== '') ? lastItem[7] : '' }; return parsedSentence; } } LocationUtility.parseGLL = parseGLL; // Parses GLQ string function parseGLQ(sentence, unit) { if (sentence !== undefined && sentence !== null) { var nmea = sentence.toString(); var nmeaParsed = nmea.split(","); var parsedSentence; var lastItem = (nmeaParsed[1] !== null && nmeaParsed[1] !== undefined && nmeaParsed[1] !== '') ? nmeaParsed[1].split('*') : ''; parsedSentence = { type: (nmeaParsed[0] !== null && nmeaParsed[0] !== undefined && nmeaParsed[0] !== '') ? nmeaParsed[0] : '', messageID: (nmeaParsed[1] !== null && nmeaParsed[1] !== undefined && nmeaParsed[1] !== '') ? lastItem[0] : '' }; return parsedSentence; } } LocationUtility.parseGLQ = parseGLQ; // Parses GNQ string function parseGNQ(sentence, unit) { if (sentence !== undefined && sentence !== null) { var nmea = sentence.toString(); var nmeaParsed = nmea.split(","); var parsedSentence; var lastItem = (nmeaParsed[1] !== null && nmeaParsed[1] !== undefined && nmeaParsed[1] !== '') ? nmeaParsed[1].split('*') : ''; parsedSentence = { type: (nmeaParsed[0] !== null && nmeaParsed[0] !== undefined && nmeaParsed[0] !== '') ? nmeaParsed[0] : '', messageID: (nmeaParsed[1] !== null && nmeaParsed[1] !== undefined && nmeaParsed[1] !== '') ? lastItem[0] : '' }; return parsedSentence; } } LocationUtility.parseGNQ = parseGNQ; // Parses GNS string function parseGNS(sentence, unit) { if (sentence !== undefined && sentence !== null) { var nmea = sentence.toString(); var nmeaParsed = nmea.split(","); var parsedSentence; var lastItem = (nmeaParsed[12] !== null && nmeaParsed[12] !== undefined && nmeaParsed[12] !== '') ? nmeaParsed[12].split('*') : 0; parsedSentence = { type: (nmeaParsed[0] !== null && nmeaParsed[0] !== undefined && nmeaParsed[0] !== '') ? nmeaParsed[0] : '', time: (nmeaParsed[1] !== null && nmeaParsed[1] !== undefined && nmeaParsed[1] !== '') ? Number(nmeaParsed[1]) : 0, latitude: (nmeaParsed[2] !== null && nmeaParsed[2] !== undefined && nmeaParsed[2] !== '') ? DMLatToDD(nmeaParsed[3], nmeaParsed[2]) : 0, latitudeDirection: (nmeaParsed[3] !== null && nmeaParsed[3] !== undefined && nmeaParsed[3] !== '') ? nmeaParsed[3] : '', longitude: (nmeaParsed[4] !== null && nmeaParsed[4] !== undefined && nmeaParsed[4] !== '') ? DMLongToDD(nmeaParsed[5], nmeaParsed[4]) : 0, longitudeDirection: (nmeaParsed[5] !== null && nmeaParsed[5] !== undefined && nmeaParsed[5] !== '') ? nmeaParsed[5] : '', positionMode: (nmeaParsed[6] !== null && nmeaParsed[6] !== undefined && nmeaParsed[6] !== '') ? nmeaParsed[6] : '', satelliteCount: (nmeaParsed[7] !== null && nmeaParsed[7] !== undefined && nmeaParsed[7] !== '') ? parseFloat(nmeaParsed[7]) : 0, HDOP: (nmeaParsed[8] !== null && nmeaParsed[8] !== undefined && nmeaParsed[8] !== '') ? parseFloat(nmeaParsed[8]) : 0, altitude: (nmeaParsed[9] !== null && nmeaParsed[9] !== undefined && nmeaParsed[9] !== '') ? parseFloat(nmeaParsed[9]) : 0, GeoidSeparation: (nmeaParsed[10] !== null && nmeaParsed[10] !== undefined && nmeaParsed[10] !== '') ? parseFloat(nmeaParsed[10]) : 0, ageOfDifferential: (nmeaParsed[11] !== null && nmeaParsed[11] !== undefined && nmeaParsed[11] !== '') ? parseFloat(nmeaParsed[11]) : 0, ageOfDifferentialStation: (nmeaParsed[12] !== null && nmeaParsed[12] !== undefined && nmeaParsed[12] !== '') ? parseFloat(lastItem[0]) : 0 }; return parsedSentence; } } LocationUtility.parseGNS = parseGNS; // Parses GPQ string function parseGPQ(sentence, unit) { if (sentence !== undefined && sentence !== null) { var nmea = sentence.toString(); var nmeaParsed = nmea.split(","); var parsedSentence; var lastItem = (nmeaParsed[1] !== null && nmeaParsed[1] !== undefined && nmeaParsed[1] !== '') ? nmeaParsed[1].split('*') : ''; parsedSentence = { type: (nmeaParsed[0] !== null && nmeaParsed[0] !== undefined && nmeaParsed[0] !== '') ? nmeaParsed[0] : '', messageID: (nmeaParsed[1] !== null && nmeaParsed[1] !== undefined && nmeaParsed[1] !== '') ? lastItem[0] : '' }; return parsedSentence; } } LocationUtility.parseGPQ = parseGPQ; // Parses GRS string function parseGRS(sentence, unit) { if (sentence !== undefined && sentence !== null) { var nmea = sentence.toString(); var nmeaParsed = nmea.split(","); var parsedSentence; var lastItem = (nmeaParsed[14] !== null && nmeaParsed[14] !== undefined && nmeaParsed[14] !== '') ? nmeaParsed[14].split('*') : ''; parsedSentence = { type: (nmeaParsed[0] !== null && nmeaParsed[0] !== undefined && nmeaParsed[0] !== '') ? nmeaParsed[0] : '', time: (nmeaParsed[1] !== null && nmeaParsed[1] !== undefined && nmeaParsed[1] !== '') ? Number(nmeaParsed[1]) : 0, mode: (nmeaParsed[2] !== null && nmeaParsed[2] !== undefined && nmeaParsed[2] !== '') ? parseFloat(nmeaParsed[2]) : 0, residual: (nmeaParsed[3] !== null && nmeaParsed[3] !== undefined && nmeaParsed[3] !== '') ? [nmeaParsed[3], nmeaParsed[4], nmeaParsed[5], nmeaParsed[6], nmeaParsed[7], nmeaParsed[8], nmeaParsed[9], nmeaParsed[10], nmeaParsed[11], nmeaParsed[12], nmeaParsed[13], lastItem[0]] : '' }; return parsedSentence; } } LocationUtility.parseGRS = parseGRS; // Parses GSA string function parseGSA(sentence, unit) { if (sentence !== undefined && sentence !== null) { var nmea = sentence.toString(); var nmeaParsed = nmea.split(","); var parsedSentence; var lastItem = (nmeaParsed[17] !== null && nmeaParsed[17] !== undefined && nmeaParsed[17] !== '') ? nmeaParsed[17].split('*') : 0; parsedSentence = { type: (nmeaParsed[0] !== null && nmeaParsed[0] !== undefined && nmeaParsed[0] !== '') ? nmeaParsed[0] : '', operationMode: (nmeaParsed[1] !== null && nmeaParsed[1] !== undefined && nmeaParsed[1] !== '') ? nmeaParsed[1] : '', navigationMode: (nmeaParsed[2] !== null && nmeaParsed[2] !== undefined && nmeaParsed[2] !== '') ? parseFloat(nmeaParsed[2]) : 0, satelliteNumber: (nmeaParsed[3] !== null && nmeaParsed[3] !== undefined && nmeaParsed[3] !== '') ? [nmeaParsed[3], nmeaParsed[4], nmeaParsed[5], nmeaParsed[6], nmeaParsed[7], nmeaParsed[8], nmeaParsed[9], nmeaParsed[10], nmeaParsed[11], nmeaParsed[12], nmeaParsed[13], nmeaParsed[14]] : '', PDOP: (nmeaParsed[15] !== null && nmeaParsed[15] !== undefined && nmeaParsed[15] !== '') ? parseFloat(nmeaParsed[15]) : 0, HDOP: (nmeaParsed[16] !== null && nmeaParsed[16] !== undefined && nmeaParsed[16] !== '') ? parseFloat(nmeaParsed[16]) : 0, VDOP: (nmeaParsed[17] !== null && nmeaParsed[17] !== undefined && nmeaParsed[17] !== '') ? parseFloat(lastItem[0]) : 0 }; return parsedSentence; } } LocationUtility.parseGSA = parseGSA; // Parses GST string function parseGST(sentence, unit) { if (sentence !== undefined && sentence !== null) { var nmea = sentence.toString(); var nmeaParsed = nmea.split(","); var parsedSentence; var lastItem = (nmeaParsed[8] !== null && nmeaParsed[8] !== undefined && nmeaParsed[8] !== '') ? nmeaParsed[8].split('*') : 0; parsedSentence = { type: (nmeaParsed[0] !== null && nmeaParsed[0] !== undefined && nmeaParsed[0] !== '') ? nmeaParsed[0] : '', time: (nmeaParsed[1] !== null && nmeaParsed[1] !== undefined && nmeaParsed[1] !== '') ? Number(nmeaParsed[1]) : 0, rangeRMS: (nmeaParsed[2] !== null && nmeaParsed[2] !== undefined && nmeaParsed[2] !== '') ? parseFloat(nmeaParsed[2]) : 0, stdMajor: (nmeaParsed[3] !== null && nmeaParsed[3] !== undefined && nmeaParsed[3] !== '') ? parseFloat(nmeaParsed[3]) : 0, stdMinor: (nmeaParsed[4] !== null && nmeaParsed[4] !== undefined && nmeaParsed[4] !== '') ? parseFloat(nmeaParsed[4]) : 0, orientation: (nmeaParsed[5] !== null && nmeaParsed[5] !== undefined && nmeaParsed[5] !== '') ? parseFloat(nmeaParsed[5]) : 0, stdLatitudeError: (nmeaParsed[6] !== null && nmeaParsed[6] !== undefined && nmeaParsed[6] !== '') ? parseFloat(nmeaParsed[6]) : 0, stdLongitudeError: (nmeaParsed[7] !== null && nmeaParsed[7] !== undefined && nmeaParsed[7] !== '') ? parseFloat(nmeaParsed[7]) : 0, stdAltitudeError: (nmeaParsed[8] !== null && nmeaParsed[8] !== undefined && nmeaParsed[8] !== '') ? parseFloat(lastItem[0]) : 0 }; return parsedSentence; } } LocationUtility.parseGST = parseGST; // Parses GSV string function parseGSV(sentence, unit) { if (sentence !== undefined && sentence !== null) { var nmea = sentence.toString(); var nmeaParsed = nmea.split(","); var parsedSentence; var lastItem = (nmeaParsed[19] !== null && nmeaParsed[19] !== undefined && nmeaParsed[19] !== '') ? nmeaParsed[19].split('*') : ''; parsedSentence = { type: (nmeaParsed[0] !== null && nmeaParsed[0] !== undefined && nmeaParsed[0] !== '') ? nmeaParsed[0] : '', numberOfMessages: (nmeaParsed[1] !== null && nmeaParsed[1] !== undefined && nmeaParsed[1] !== '') ? parseFloat(nmeaParsed[1]) : 0, messageNumber: (nmeaParsed[2] !== null && nmeaParsed[2] !== undefined && nmeaParsed[2] !== '') ? parseFloat(nmeaParsed[2]) : 0, satellitesInView: (nmeaParsed[3] !== null && nmeaParsed[3] !== undefined && nmeaParsed[3] !== '') ? parseFloat(nmeaParsed[3]) : 0, satelliteIDs: (nmeaParsed[4] !== null && nmeaParsed[4] !== undefined && nmeaParsed[4] !== '') ? [nmeaParsed[4], nmeaParsed[5], nmeaParsed[6], nmeaParsed[7]] : '', elevations: (nmeaParsed[8] !== null && nmeaParsed[8] !== undefined && nmeaParsed[8] !== '') ? [nmeaParsed[8], nmeaParsed[9], nmeaParsed[10], nmeaParsed[11]] : '', azimuth: (nmeaParsed[12] !== null && nmeaParsed[12] !== undefined && nmeaParsed[12] !== '') ? [nmeaParsed[12], nmeaParsed[13], nmeaParsed[14], nmeaParsed[15]] : '', signalStrengths: (nmeaParsed[0] !== null && nmeaParsed[16] !== undefined && nmeaParsed[16] !== '') ? [nmeaParsed[16], nmeaParsed[17], nmeaParsed[18], lastItem[0]] : '' }; return parsedSentence; } } LocationUtility.parseGSV = parseGSV; // Parses RMC string function parseRMC(sentence, unit) { if (sentence !== undefined && sentence !== null) { var nmea = sentence.toString(); var nmeaParsed = nmea.split(","); var parsedSentence; var lastItem = (nmeaParsed[12] !== null && nmeaParsed[12] !== undefined && nmeaParsed[12] !== '') ? nmeaParsed[12].split('*') : ''; parsedSentence = { type: (nmeaParsed[0] !== null && nmeaParsed[0] !== undefined && nmeaParsed[0] !== '') ? nmeaParsed[0] : '', time: (nmeaParsed[1] !== null && nmeaParsed[1] !== undefined && nmeaParsed[1] !== '') ? Number(nmeaParsed[1]) : 0, status: (nmeaParsed[2] !== null && nmeaParsed[2] !== undefined && nmeaParsed[2] !== '') ? nmeaParsed[2] : '', latitude: (nmeaParsed[3] !== null && nmeaParsed[3] !== undefined && nmeaParsed[3] !== '') ? DMLatToDD(nmeaParsed[4], nmeaParsed[3]) : 0, latitudeDirection: (nmeaParsed[4] !== null && nmeaParsed[4] !== undefined && nmeaParsed[4] !== '') ? nmeaParsed[4] : '', longitude: (nmeaParsed[5] !== null && nmeaParsed[5] !== undefined && nmeaParsed[5] !== '') ? DMLongToDD(nmeaParsed[6], nmeaParsed[5]) : 0, longitudeDirection: (nmeaParsed[6] !== null && nmeaParsed[6] !== undefined && nmeaParsed[6] !== '') ? nmeaParsed[6] : '', speed: (nmeaParsed[7] !== null && nmeaParsed[7] !== undefined && nmeaParsed[7] !== '') ? parseFloat(nmeaParsed[7]) : 0, course: (nmeaParsed[8] !== null && nmeaParsed[8] !== undefined && nmeaParsed[8] !== '') ? parseFloat(nmeaParsed[8]) : 0, date: (nmeaParsed[9] !== null && nmeaParsed[9] !== undefined && nmeaParsed[9] !== '') ? Number(nmeaParsed[9]) : 0, magneticVariation: (nmeaParsed[10] !== null && nmeaParsed[10] !== undefined && nmeaParsed[10] !== '') ? parseFloat(nmeaParsed[10]) : 0, magneticVariationDirection: (nmeaParsed[11] !== null && nmeaParsed[11] !== undefined && nmeaParsed[11] !== '') ? nmeaParsed[10] : '', positionMode: (nmeaParsed[12] !== null && nmeaParsed[12] !== undefined && nmeaParsed[12] !== '') ? lastItem[0] : '' }; return parsedSentence; } } LocationUtility.parseRMC = parseRMC; // Parses VTG string function parseVTG(sentence, unit) { if (sentence !== undefined && sentence !== null) { var nmea = sentence.toString(); var nmeaParsed = nmea.split(","); var parsedSentence; var lastItem = (nmeaParsed[9] !== null && nmeaParsed[9] !== undefined && nmeaParsed[9] !== '') ? nmeaParsed[9].split('*') : ''; parsedSentence = { type: (nmeaParsed[0] !== null && nmeaParsed[0] !== undefined && nmeaParsed[0] !== '') ? nmeaParsed[0] : '', courseOverGround: (nmeaParsed[1] !== null && nmeaParsed[1] !== undefined && nmeaParsed[1] !== '') ? parseFloat(nmeaParsed[1]) : 0, fixedField: (nmeaParsed[2] !== null && nmeaParsed[2] !== undefined && nmeaParsed[2] !== '') ? nmeaParsed[2] : '', courseOverGroundMagnetic: (nmeaParsed[3] !== null && nmeaParsed[3] !== undefined && nmeaParsed[3] !== '') ? parseFloat(nmeaParsed[3]) : 0, fixedFieldMagnetic: (nmeaParsed[4] !== null && nmeaParsed[4] !== undefined && nmeaParsed[4] !== '') ? nmeaParsed[4] : '', speedOverGround: (nmeaParsed[5] !== null && nmeaParsed[5] !== undefined && nmeaParsed[5] !== '') ? parseFloat(nmeaParsed[5]) : 0, fixedFieldKnots: (nmeaParsed[6] !== null && nmeaParsed[6] !== undefined && nmeaParsed[6] !== '') ? nmeaParsed[6] : '', speedOverGroundMetric: (nmeaParsed[7] !== null && nmeaParsed[7] !== undefined && nmeaParsed[7] !== '') ? parseFloat(nmeaParsed[7]) : 0, fixedFieldKMH: (nmeaParsed[8] !== null && nmeaParsed[8] !== undefined && nmeaParsed[8] !== '') ? nmeaParsed[8] : '', positionMode: (nmeaParsed[9] !== null && nmeaParsed[9] !== undefined && nmeaParsed[9] !== '') ? lastItem[0] : '' }; return parsedSentence; } } LocationUtility.parseVTG = parseVTG; // Parses ZDA string function parseZDA(sentence, unit) { if (sentence !== undefined && sentence !== null) { var nmea = sentence.toString(); var nmeaParsed = nmea.split(","); var parsedSentence; var lastItem = (nmeaParsed[6] !== null && nmeaParsed[6] !== undefined && nmeaParsed[6] !== '') ? nmeaParsed[6].split('*') : 0; parsedSentence = { type: (nmeaParsed[0] !== null && nmeaParsed[0] !== undefined && nmeaParsed[0] !== '') ? nmeaParsed[0] : '', time: (nmeaParsed[1] !== null && nmeaParsed[1] !== undefined && nmeaParsed[1] !== '') ? Number(nmeaParsed[1]) : 0, day: (nmeaParsed[2] !== null && nmeaParsed[2] !== undefined && nmeaParsed[2] !== '') ? Number(nmeaParsed[2]) : 0, month: (nmeaParsed[3] !== null && nmeaParsed[3] !== undefined && nmeaParsed[3] !== '') ? Number(nmeaParsed[3]) : 0, year: (nmeaParsed[4] !== null && nmeaParsed[4] !== undefined && nmeaParsed[4] !== '') ? Number(nmeaParsed[4]) : 0, localTimeHours: (nmeaParsed[5] !== null && nmeaParsed[5] !== undefined && nmeaParsed[5] !== '') ? Number(nmeaParsed[5]) : 0, localTimeMinutes: (nmeaParsed[6] !== null && nmeaParsed[6] !== undefined && nmeaParsed[6] !== '') ? Number(lastItem[0]) : 0 }; return parsedSentence; } } LocationUtility.parseZDA = parseZDA; // Convert altitude function convertAlt(altitude, unit) { var alt = parseFloat(altitude); var calAlt; if (unit == 'imp') { calAlt = Math.round(alt * 3.28084); } else { calAlt = Math.round(alt); } return calAlt; } LocationUtility.convertAlt = convertAlt; // Converts ddmm.mmmmm to decimal degrees function DMToDD(latitudeDirection, latitude, longitudeDirection, longitude) { var lat = parseFloat(latitude); var latDirection = latitudeDirection; var long = parseFloat(longitude); var longDirection = longitudeDirection; var degreesLatitude = Math.floor(lat / 100.0); var minutesLatitude = lat - (degreesLatitude * 100.0); var decimalDegreesLatitude = degreesLatitude + (minutesLatitude / 60.0); if (latDirection == 'S') { decimalDegreesLatitude = decimalDegreesLatitude * -1; } var degreesLongitude = Math.floor(long / 100.0); var minutesLongitude = long - (degreesLongitude * 100.0); var decimalDegreesLongitude = degreesLongitude + (minutesLongitude / 60.0); if (longDirection == 'W') { decimalDegreesLongitude = decimalDegreesLongitude * -1; } var dd; dd = { latitude: decimalDegreesLatitude, longitude: decimalDegreesLongitude }; return dd; } LocationUtility.DMToDD = DMToDD; // Converts latitude ddmm.mmmmm to decimal degrees function DMLatToDD(latitudeDirection, latitude) { var lat = parseFloat(latitude); var latDirection = latitudeDirection; var degreesLatitude = Math.floor(lat / 100.0); var minutesLatitude = lat - (degreesLatitude * 100.0); var decimalDegreesLatitude = degreesLatitude + (minutesLatitude / 60.0); if (latDirection == 'S') { decimalDegreesLatitude = decimalDegreesLatitude * -1; } return decimalDegreesLatitude; } LocationUtility.DMLatToDD = DMLatToDD; // Converts longitude ddmm.mmmmm to decimal degrees function DMLongToDD(longitudeDirection, longitude) { var long = parseFloat(longitude); var longDirection = longitudeDirection; var degreesLongitude = Math.floor(long / 100.0); var minutesLongitude = long - (degreesLongitude * 100.0); var decimalDegreesLongitude = degreesLongitude + (minutesLongitude / 60.0); if (longDirection == 'W') { decimalDegreesLongitude = decimalDegreesLongitude * -1; } return decimalDegreesLongitude; } LocationUtility.DMLongToDD = DMLongToDD; // Calculate horizontal accuracy // Must pass latitude and longitude error which comes from GST or similar sentence // Note this calculation may vary between gps units function horizontalAccuracy(latitudeError, longitudeError, unit) { var latError = Math.pow(Number(latitudeError), 2); var longError = Math.pow(Number(longitudeError), 2); var totalError = latError + longError; var accuracy = Math.sqrt(totalError); var accuracyUnit; if (unit == 'imp') { accuracyUnit = accuracy * 3.28084; } else if (unit == 'm') { accuracyUnit = accuracy; } var accuracyFixed = accuracyUnit.toFixed(1); var accuracyNumber = parseFloat(accuracyF