72 lines
2.3 KiB
JavaScript
72 lines
2.3 KiB
JavaScript
var helpers = require("../helpers.js")
|
|
|
|
exports.TYPE = 'fix';
|
|
exports.ID = 'GGA';
|
|
|
|
/*
|
|
11
|
|
1 2 3 4 5 6 7 8 9 10 | 12 13 14 15
|
|
| | | | | | | | | | | | | | |
|
|
$--GGA,hhmmss.ss,llll.ll,a,yyyyy.yy,a,x,xx,x.x,x.x,M,x.x,M,x.x,xxxx*hh
|
|
1) Time (UTC)
|
|
2) Latitude
|
|
3) N or S (North or South)
|
|
4) Longitude
|
|
5) E or W (East or West)
|
|
6) GPS Quality Indicator,
|
|
0 - fix not available,
|
|
1 - GPS fix,
|
|
2 - Differential GPS fix
|
|
7) Number of satellites in view, 00 - 12
|
|
8) Horizontal Dilution of precision
|
|
9) Antenna Altitude above/below mean-sea-level (geoid)
|
|
10) Units of antenna altitude, meters
|
|
11) Geoidal separation, the difference between the WGS-84 earth
|
|
ellipsoid and mean-sea-level (geoid), "-" means mean-sea-level below ellipsoid
|
|
12) Units of geoidal separation, meters
|
|
13) Age of differential GPS data, time in seconds since last SC104
|
|
type 1 or 9 update, null field when DGPS is not used
|
|
14) Differential reference station ID, 0000-1023
|
|
15) Checksum
|
|
*/
|
|
var FIX_TYPE = ['none', 'fix', 'delta','pps','rtk','frtk','estimated','manual','simulation'];
|
|
|
|
exports.decode = function(fields) {
|
|
return {
|
|
sentence: exports.ID,
|
|
type: exports.TYPE,
|
|
timestamp: fields[1],
|
|
lat: fields[2],
|
|
latPole: fields[3],
|
|
lon: fields[4],
|
|
lonPole: fields[5],
|
|
fixType: FIX_TYPE[+fields[6]],
|
|
numSat: +fields[7],
|
|
horDilution: +fields[8],
|
|
alt: +fields[9],
|
|
altUnit: fields[10],
|
|
geoidalSep: +fields[11],
|
|
geoidalSepUnit: fields[12],
|
|
differentialAge: +fields[13],
|
|
differentialRefStn: fields[14]
|
|
};
|
|
}
|
|
|
|
exports.encode = function (talker, msg) {
|
|
var result = ['$' + talker + exports.ID];
|
|
result.push(helpers.encodeTime(msg.timestamp));
|
|
result.push(helpers.encodeDegrees(msg.lat));
|
|
result.push(msg.latPole);
|
|
result.push(helpers.encodeDegrees(msg.lon));
|
|
result.push(msg.lonPole);
|
|
result.push(FIX_TYPE.indexOf(msg.fixType));
|
|
result.push(helpers.encodeValue(msg.numSat));
|
|
result.push(helpers.encodeFixed(msg.horDilution, 1));
|
|
result.push(helpers.encodeAltitude(msg.alt));
|
|
result.push(helpers.encodeGeoidalSeperation(msg.geoidalSep));
|
|
result.push(helpers.encodeFixed(msg.differentialAge, 2));
|
|
result.push(msg.differentialRefStn);
|
|
|
|
var resultMsg = result.join(',');
|
|
return resultMsg + helpers.computeChecksum(resultMsg);
|
|
} |