import * as Immutable from "immutable";
import * as sym from "./constants";
/**
 * ECEF position: x, y, z
 *
 * TODO: associate a datum and epoch-of-datum
 * TODO (Buro): Add some manner of Point definition from other JavaScript
 * solution libraries.
 *
 * @param {Number} x - X parameter (meters)
 * @param {Number} y - Y parameter (meters)
 * @param {Number} z - Z parameter (meters)
 */
export declare class ECEFSolution {
    x: number;
    y: number;
    z: number;
    constructor(x: number, y: number, z: number);
    distanceTo(b: ECEFSolution): number;
    toLLA(): LLASolution;
    toJSON(): Object;
    static objHasValidECEF(obj: Object): boolean;
    static fromJSON(obj: Object): ECEFSolution;
    static fromMap(map: Immutable.Map<string, number>): ECEFSolution;
    toString(): string;
}
/**
 * Baseline vector in ECEF: x, y, z
 *
 * @param {Number} x - X parameter (meters)
 * @param {Number} y - Y parameter (meters)
 * @param {Number} z - Z parameter (meters)
 */
export declare class ECEFBaseline {
    dx: number;
    dy: number;
    dz: number;
    constructor(dx: number, dy: number, dz: number);
    norm(): number;
    toJSON(): Object;
    static objHasValidECEF(obj: Object): boolean;
    static fromJSON(obj: Object): ECEFBaseline;
    static fromMap(map: Immutable.Map<string, number>): ECEFBaseline;
    toString(): string;
}
/**
 * Latitude, longitude, ellipsoid altitude
 *
 * @param {Number} lat - latitude (decimal degrees)
 * @param {String} latPole - latitude pole: 'N' or 'S'
 * @param {Number} lon - longitude (decimal degrees)
 * @param {String} lonPole - longitude pole: 'W' or 'E'
 * @param {Number} alt - altitude (meters)
 */
export declare class LLASolution {
    lat: number;
    latPole: string;
    lon: number;
    lonPole: string;
    alt: number;
    constructor(lat: number, latPole: string, lon: number, lonPole: string, alt: number);
    distanceTo(b: LLASolution): number[];
    /**
     * Convert to ECEF frame.
     *
     * @return {ECEFSolution}
     */
    toECEF(): ECEFSolution;
    static objHasValidLLA(obj: Object): boolean;
    static fromJSON(obj: Object): LLASolution;
    static fromMap(map: Immutable.Map<string, number>): LLASolution;
    /**
     * Materialize a LLASolution from a DMS string. Used here is the ellipsoidal
     * height.
     *
     * For more details, see https://www.ngs.noaa.gov/PUBS_LIB/gislis96.html.
     *
     * @param {String} latStr      - Latitude (DMS)
     * @param {String} lonStr      - Longitude (DMS)
     * @param {Number} height      - Ellipsoidal height (meters)
     * @return {LLASolution}
     */
    static fromDMS(latStr: string, lonStr: string, height: number): LLASolution;
    toJSON(): Object;
    toString(): string;
}
/**
 * A solution status represents a position solution from a sample GNSS receiver,
 * and additionally keeps track of a few other parameters of interest reported
 * during that epoch. It represents a sample solution at a particular instance
 * of time, and stores a flat map for a particular instance in time, using the
 * result schema defined by Swift's gnss-testing repository:
 * https://github.com/swift-nav/gnss-testing/blob/master/DESIGN.md#swift-solution-csv
 *
 * Example:
 * ```
 * import { ECEFSolution, SolutionStatus } from "./coords";
 * const time = new Date('2016-06-05');
 * const ecef = new coords.ECEFSolution(ctest.earthA, 0, 0);
 * const soln = new coords.SolutionStatus(time, ecef.toLLA(), 0, 3, 0.5);
 * console.log(event.toJSON()); =>
 * {"epoch(gpst)": new Date("2016-06-05T00:00:00.000Z"),
 *  "fix_mode": "integer_rtk",
 *  "latency(sec)": 0.5,
 *  "num_sats": 3,
 *  "est_error_2d(m)": NaN,
 *  "est_error_3d(m)": NaN,
 *  "est_error_v(m)": NaN,
 *  "baseline_x(m)": NaN,
 *  "baseline_y(m)": NaN,
 *  "baseline_z(m)": NaN,
 *  "rover_pos_x(m)":6378137,
 *  "rover_pos_y(m)":0,
 *  "rover_pos_z(m)":0,
 *  "rover_pos_lat(deg)":0,
 *  "rover_pos_lon(deg)":0,
 *  "rover_pos_height(m)":0}
 * ```
 */
export declare class SolutionStatus {
    time: Date;
    ecefSolution: ECEFSolution;
    ecefBaseline: ECEFBaseline;
    llaSolution: LLASolution;
    computedEcef: ECEFSolution;
    computedLla: LLASolution;
    fixMode: sym.FIX_MODE_TYPE;
    numSats: number;
    latency: number;
    estHError: number;
    estVError: number;
    estSphError: number;
    constructor(time: Date, ecef?: ECEFSolution, lla?: LLASolution, fixMode?: sym.FIX_MODE_TYPE, numSats?: number, latency?: number, ecefBaseline?: ECEFBaseline, estHError?: number, estVError?: number, estSphError?: number);
    toJSON(): Object;
    static fromJSON(obj: Object): SolutionStatus;
    static fromMap(map: Immutable.Map<string, number>): SolutionStatus;
    compareTo(ref: SolutionStatus): [number, number, number];
    toString(): string;
    getLLA(): LLASolution;
    getECEF(): ECEFSolution;
    mergeWith(other: SolutionStatus): SolutionStatus;
}
