import { Map } from '@2gis/mapgl/types';
import { Easing } from '@2gis/mapgl/types/types/animations';
import { BuildingOptions } from '../types';
export interface FlightPart {
    duration?: number;
    center?: number[];
    traveledDistance?: number;
    centerEasing?: Easing;
    zoom?: number;
    zoomEasing?: Easing;
    styleZoom?: number;
    styleZoomEasing?: Easing;
    pitch?: number;
    pitchEasing?: Easing;
    rotation?: number;
    rotationNormalize?: boolean;
    rotationDuration?: number;
    rotationEasing?: Easing | 'easeInSine' | 'easeOutSine';
    f?: () => void;
    waitIdle?: boolean;
    incremental?: boolean;
}
export interface BuildingFlightOption {
    zoomInOutTime: number;
    defaultRotationDuration: number;
    defaultZoom: number;
    defaultPitch: number;
    step: number;
}
interface MapFlightOptions {
    zoom: number;
    maxZoom: number;
    minZoom: number;
    center: number[];
    pitch: number;
    rotation: number;
    baseDuration?: number;
    maxZoomDuration?: number;
    buildingFlightOption?: BuildingFlightOption;
}
export declare class MapFlight {
    zoom: number;
    maxZoom: number;
    minZoom: number;
    center: number[];
    pitch: number;
    rotation: number;
    baseDuration: number;
    maxZoomDuration: number;
    zoomAmplitude: number;
    buildingFlightOption: BuildingFlightOption;
    flightId: number;
    activeFlightMap: {
        [id: number]: boolean;
    };
    constructor({ zoom, maxZoom, minZoom, center, pitch, rotation, baseDuration, maxZoomDuration, buildingFlightOption, }: MapFlightOptions);
    getInitialMapOptions(): {
        zoom: number;
        maxZoom: number;
        minZoom: number;
        center: number[];
        pitch: number;
        rotation: number;
    };
    private getFlightId;
    private waitIdle;
    private sleep;
    abortFlights(): void;
    runFlight(map: Map, scenario: FlightPart[], logParts?: boolean): Promise<void>;
    getBuildingBaseFlight({ center, styleZoom, pitch, ...rest }: {
        center: number[];
        styleZoom?: number;
        pitch?: number;
        rotationDuration?: number;
    }): FlightPart[];
    runBuildingFlight(map: Map, opts: {
        center: number[];
        styleZoom?: number;
        pitch?: number;
        rotationDuration?: number;
    }, f?: () => void): Promise<void>;
    flyToOpts(map: Map, opts?: {
        duration?: number;
        center?: number[];
        zoom?: number;
        styleZoom?: number;
        pitch?: number;
        rotation?: number;
        easing?: Easing;
    }, f?: () => void): Promise<void>;
    private getZoomParams;
    getZoomPart({ from, to, }: {
        from?: number;
        to?: number;
    }): FlightPart;
    getMoveCenterOnMaxZoomPart(center?: number[]): FlightPart;
    getMoveCenter(map: Map, { to, ...rest }: {
        to?: number[];
        from?: number[];
    }): FlightPart;
    getZoomToOpts({ from, opts, }: {
        from?: number;
        opts?: BuildingOptions['mapOptions'];
    }): FlightPart;
    resetMapRestrictions(map: Map): void;
    getLineFlight(line: number[][], { speed, distanceLimit, restrictRotationDuration, logResult, cb, }: {
        speed?: number;
        distanceLimit?: number;
        restrictRotationDuration?: boolean;
        logResult?: boolean;
        cb?: (traveledDistance?: number) => void;
    }): {
        flight: FlightPart[];
        speed: number;
        distance: number;
    };
    getMidpoint(firstPoint: number[], secondPoint: number[]): import('geojson').Position;
}
export {};
