gps
Version:
A GPS NMEA parser library
233 lines (206 loc) • 5.43 kB
TypeScript
export as namespace gps;
export = GPS;
declare class GPS {
state: GPS.GPSState;
/**
* The update method is the most important export function, it parses a NMEA sentence and forces the callbacks to trigger
* @param line NMEA string
* @returns is valid
*/
update(line: string): boolean;
/**
* Will call update() when a full NMEA sentence has been arrived
* @param chunk Partial NMEA string
*/
updatePartial(chunk: string): void;
/**
* Adds an event listener for a protocol to occur (see implemented protocols, simply use the name - upper case) or for all sentences with data.
* Because GPS.js should be more general, it doesn't inherit EventEmitter, but simply invokes the callback.
* @param event Event type
* @param callback Callback with data
* @returns GPS instance
*/
on(event: string, callback: (data: any) => void): GPS;
/**
* Removes an event listener
* @param event Event type
* @returns GPS instance
*/
off(event: string): GPS;
/**
* Parses a single line and returns the resulting object, in case the callback system isn't needed/wanted
* @param line NMEA string
* @returns NMEA object or False
*/
static Parse<T = any>(line: string): false | T;
/**
* Calculates the distance between two geo-coordinates using Haversine formula
* @param latFrom
* @param lonFrom
* @param latTo
* @param lonTo
* @returns Distance in km
*/
static Distance(
latFrom: number,
lonFrom: number,
latTo: number,
lonTo: number
): number;
/**
* Calculates the length of a traveled route, given as an array of {lat: x, lon: y} point objects
* @param points Array of {lat: x, lon: y}
* @returns Distance in km
*/
static TotalDistance(points: GPS.LatLon[]): number;
/**
* Calculates the angle from one coordinate to another. Heading is represented as windrose coordinates (N=0, E=90, S=189, W=270)
* @param latFrom
* @param lonFrom
* @param latTo
* @param lonTo
* @returns Heading in degrees
*/
static Heading(
latFrom: number,
lonFrom: number,
latTo: number,
lonTo: number
): number;
}
declare namespace GPS {
export interface LatLon {
lat: number;
lon: number;
}
export interface GPSState {
[key: string]: any;
processed: number;
errors: number;
time?: Date;
lat?: number;
lon?: number;
alt?: number;
speed?: number;
track?: number;
satsActive?: number[];
satsVisible?: Satellite[];
}
export interface GGA {
time: Date;
lat: number;
lon: number;
alt: number;
quality?: GGAQuality;
satellites: number;
hdop: number;
geoidal: number;
age: number;
stationID: number;
raw: string;
valid: boolean;
type: 'GGA';
}
export enum GGAQuality {
'fix' = 1,
'dgps-fix' = 2,
'pps-fix' = 3,
'rtk' = 4,
'rtk-float' = 5,
'estimated' = 6,
'manual' = 7,
'simulated' = 8
}
export interface GSA {
mode?: 'manual'|'automatic';
fix?: '2D'|'3D';
satellites: number[];
pdop: number;
hdop: number;
vdop: number;
raw: string;
valid: boolean;
type: 'GSA';
}
export interface RMC {
time: Date;
status?: 'active'|'void';
lat: number;
lon: number;
speed: number;
track: number;
variation: number;
faa: FAA;
raw: string;
valid: boolean;
type: 'RMC';
}
export interface VTG {
track: number;
trackMagnetic: number;
speed: number;
faa: FAA;
raw: string;
valid: boolean;
type: 'VTG';
}
export enum FAA {
'autonomous' = 'A',
'differential' = 'D',
'estimated' = 'E',
'manual input' = 'M',
'simulated' = 'S',
'not valid' = 'N',
'precise' = 'P'
}
export interface GSV {
msgNumber: number;
msgsTotal: number;
satellites: Satellite[];
raw: string;
valid: boolean;
type: 'GSV';
}
export interface Satellite {
prn: number;
elevation: number;
azimuth: number;
snr: number;
status: string;
}
export interface GLL {
time: Date;
status?: 'active'|'void';
lat: number;
lon: number;
raw: string;
valid: boolean;
type: 'GLL';
}
export interface ZDA {
time: Date;
raw: string;
valid: boolean;
type: 'ZDA';
}
export interface GST {
time: Date;
rms: number;
ellipseMajor: number;
ellipseMinor: number;
ellipseOrientation: number;
latitudeError: number;
longitudeError: number;
heightError: number;
raw: string;
valid: boolean;
type: 'GST';
}
export interface HDT {
heading: number;
trueNorth: boolean;
raw: string;
valid: boolean;
type: 'HDT';
}
}