@iotek/gps
Version:
A GPS NMEA parser library
249 lines (221 loc) • 5.1 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;
/**
* Manually update state
* @param state object with state
*/
setState(state: CustomState): 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 CustomState {
time?: Date;
lat?: number;
lon?: number;
alt?: number;
speed?: number;
track?: number;
satsActive?: number[];
satsVisible?: Satellite[];
}
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";
}
}