/// <reference types="node" />
import React from 'react';
import { MAP_SIMULATION_REFERENCE, SIMULATION_COMMAND } from './CommandTypes';
import { GEOJSON_PATH, SIMULATION_OPTIONS, SIMULATION_PATH, SIMULATION_STATUS } from './JibestreamTypes';
export type PathSimulatorProps = {
    updateUserLocation: (loc: number[], heading: number) => void;
    onSimStatusChanged?: (status: SIMULATION_STATUS) => void;
};
export type PathSimulatorState = {
    simStatus: SIMULATION_STATUS;
    simOptions?: SIMULATION_OPTIONS;
    path?: GEOJSON_PATH;
    timer?: NodeJS.Timer;
};
export type PathSimulatorRef = {
    startPathSimulation: (path: GEOJSON_PATH, options: SIMULATION_OPTIONS) => void;
    controlSimulation: (command: SIMULATION_COMMAND) => SIMULATION_STATUS;
    getSimulationStatus: () => SIMULATION_STATUS;
    getSimulationsPaths: () => SIMULATION_PATH[];
};
export declare class PathSimulator extends React.Component<PathSimulatorProps, PathSimulatorState> implements MAP_SIMULATION_REFERENCE {
    updateUserLocation: (loc: number[], heading: number) => void;
    onSimStatusChanged?: (status: SIMULATION_STATUS) => void;
    onLocationChange?: (loc: number[]) => void;
    onStatusChange?: (status: SIMULATION_STATUS) => void;
    constructor(props: PathSimulatorProps);
    startPathSimulation(path: GEOJSON_PATH, options: SIMULATION_OPTIONS): void;
    controlSimulation(command: SIMULATION_COMMAND): SIMULATION_STATUS;
    getSimulationStatus(): SIMULATION_STATUS;
    getSimulationsPaths(): SIMULATION_PATH[];
    getPoint(p: {
        lat: number;
        lon: number;
    }): number[];
    updatePathLocation(): void;
    moveDistanceAlongPath(path: GEOJSON_PATH, startLocation: number[], startSegment: number, distance: number): {
        loc: number[];
        leg: number;
    };
    getRandomNumber(start: number, end: number): number;
    randomizeLocation(loc: number[], radius: number): number[];
    getPointDistanceAlongPath(start: number[], end: number[], distance: number): {
        endLoc?: number[];
        remainingDist: number;
    };
    getDestinationPoint(start: number[], bearing: number, distance: number): number[];
    getBearingBetweenPoints(start: number[], end: number[]): number;
    getDistanceBetweenPoints(start: number[], end: number[]): number;
    deg2rad(deg: number): number;
    rad2deg(rad: number): number;
    render(): React.JSX.Element;
}
//# sourceMappingURL=PathSimulator.d.ts.map