import { LatLng } from './LatLng';
/**
 * Necessary for creating new instances T extends LatLng (Path<T extends LatLng>)
 */
export declare type LatLangFactory = (latitude: number, longitude: number) => LatLng;
export declare class Path<T extends LatLng> {
    private logger;
    /** For [Distance] calculations */
    private readonly _distance;
    private readonly latLngFactory;
    /** Coordinates managed by this class */
    private readonly _coordinates;
    static from<T extends LatLng>(coordinates: T[]): Path<T>;
    get coordinates(): readonly T[];
    clear(): void;
    add(value: T): void;
    addAll(values: readonly T[]): void;
    get first(): T;
    get last(): T;
    /**
     * Splits the path into even sections.
     *
     * The section size is defined with [distanceInMeterPerTime].
     * [distanceInMeterPerTime] means that the original size on the given
     * path will stay the same but the created section could be smaller because of the "linear distance"
     *
     * However - if you follow the steps in a given time then the distance from point to point (over time)
     * is correct. (Almost - because of the curves generate with [CatmullRomSpline2D]
     *
     *     final Path path = new Path.from(zigzag);
     *
     * If [smoothPath] is turned on than the minimum of 3 coordinates is required otherwise
     * we need two
     */
    equalize(distanceInMeterPerTime: number, { smoothPath }?: {
        smoothPath?: boolean;
    }): Path<LatLng>;
    get distance(): number;
    /** Returns the number of coordinates */
    get nrOfCoordinates(): number;
    /**
     * Calculates the center of a collection of geo coordinates
     *
     * The function rounds the result to 6 decimals
     */
    get center(): LatLng;
    /** 4 Points are necessary to create a [CatmullRomSpline2D] */
    private _createSpline;
    /**
     * Convert [Point2D] to [LatLng]
     */
    private _pointToLatLng;
}
