import { EventDispatcher, Object3D, Vector3 } from "three";
import { Context } from "./context/context";
import { Timer, HooksName } from "./utils";
import { Config, ParamsConfig } from "./config";
import { Floor, Graphic, HeatmapDataParam, ModelOptions, Poi, Poi2, PoiOptionsParam, PoiOptionsParam2 } from "./elements";
import { SvgLine, SvgPolygon } from "./elements";
import { GraphicInfo, GraphicOptions } from "./types";
import { Plugin } from "./plugins/base";
import { AibeeLoader } from "./loader";
interface BmapEventMap {
    "zoom-change": {
        basicZoom: number;
        cameraZoom: number;
    };
    "center-change": {
        center: [number, number];
        brand: string;
        project: string;
    };
    [HooksName.SWITCH_FLOOR_BEFORE]: {
        data: {
            curFloor: Floor;
            graphics: Graphic[];
        };
    };
    [HooksName.SWITCH_FLOOR_GROUND]: {
        data: {
            curFloor: Floor;
        };
    };
    [HooksName.SWITCH_FLOOR_AFTER]: {
        data: {
            curFloor: Floor;
            graphics: Graphic[];
        };
    };
}
export type MapType = "2d" | "3d";
export declare enum MapTypePolar {
    D2 = 0,
    D3 = 1.1
}
export declare class BMap extends EventDispatcher<BmapEventMap> {
    private container;
    config: Config;
    context: Context;
    polarKeys: string[];
    azimuthalKeys: string[];
    svgLine?: SvgLine;
    svgPolygon?: SvgPolygon;
    prevCameraZoom: number;
    type: MapType;
    currentBuildGround: GraphicOptions | null;
    observe: ResizeObserver | null;
    buildingCenter: [number, number];
    timer: Timer;
    plugins: Plugin[];
    debounceResize: any;
    loader: AibeeLoader | null;
    constructor(container: HTMLElement, config?: ParamsConfig);
    get basicZoom(): number;
    set basicZoom(zoom: number);
    changeBuildingCenter(data: GraphicInfo | null, { brand, project }: {
        brand: string;
        project: string;
    }): void;
    use(plugin: Plugin): void;
    unUse(plugin: Plugin): void;
    triggerHooks(hooks: HooksName, data: any): void;
    switchFloor(floor: string): Promise<Floor | null>;
    switchFloorByFloor(floor: Floor, disposeFloor?: boolean, graphics?: Object3D<import("three").Object3DEventMap>[]): void;
    initialFloorCamera(): void;
    onControlChange: () => void;
    addModel(graphic: Graphic, options: ModelOptions): void;
    addHeatmap(data: HeatmapDataParam): import("./elements").HeatmapElement | undefined;
    getLegacyToGraphicMap(): Map<string, Graphic>;
    /**
     * 获取当前楼层全部的graphic
     * @returns
     */
    getFloorAllGraphics(): Graphic[];
    createGraphicPoi(graphic: Graphic, options: PoiOptionsParam): Poi | null;
    createPoi2ByPosition(position: {
        x: number;
        y: number;
        z: number;
    }, options: PoiOptionsParam2): Poi2 | null;
    removeHeatMap(): void;
    /**
     * 移动相机位置让选中的元素居中显示
     * @param ele { Graphic | Poi }
     * @param duration
     * @param [offsetX=0] x轴方向上的偏移 正直往左
     * @param [offsetY=0] Y轴方向上的偏移 正直往下
     */
    translateElementToCenter(ele: {
        getPosition: () => Vector3;
    }, duration?: number, offsetX?: number, offsetY?: number): Promise<unknown>;
    /**
     * 移动相机位置让选中的元素居中显示
     * @param ele { Graphic | Poi }
     * @param duration
     */
    translateElementToCenterX(ele: {
        getPosition: () => Vector3;
    }, duration?: number): Promise<unknown>;
    /**
     * 获取物体的屏幕坐标
     */
    getElementDeviceCoordinate(ele: Object3D): {
        x: number;
        y: number;
    };
    /**
     * 切换2d、3d视角
     * @param type
     * @param duration
     */
    changeMapType(type: MapType, duration?: number): Promise<unknown>;
    resetView(duration?: number): Promise<void>;
    /**
     * 缩小地图
     * @param zoom
     * @param duration
     * @returns
     */
    reduceMap(zoom?: number, duration?: number): Promise<unknown>;
    /**
     * 放大地图
     * @param zoom
     * @param duration
     * @returns
     */
    enlargeMap(zoom?: number, duration?: number): Promise<unknown>;
    onKeydown: (e: KeyboardEvent) => void;
    onKeyUp: (e: KeyboardEvent) => void;
    registryEvent(): void;
    unRegistryEvent(): void;
    /**
     * 配置坐标定点 2D/3D线性切换的快捷键
     * @param key
     */
    configurePolarShortcutKeys(keys: string[]): void;
    configureAzimuthalShortcutKeys(keys: string[]): void;
    rotateMap(radius?: number, duration?: number): void | Promise<unknown>;
    /**
     * 测量距离
     * @returns
     */
    measureDistance(): Promise<unknown>;
    /**
     * 取消测量长度
     */
    cancelDistance(): void;
    /**
     * 测量面积
     */
    measureArea(): Promise<unknown>;
    /**
     * 取消测量面积
     */
    cancelArea(): void;
    fitCameraByPois(pois: Poi2[], padding?: [number, number, number, number], duration?: number): Promise<unknown>;
    fitCameraByPoiNodeIds(ids: string[], padding?: [number, number, number, number], duration?: number): Promise<unknown>;
    /**
     * 根据nodeId 获取graphic
     */
    getGraphicByNodeId(nodeId: string): Graphic | null;
    deleteGraphic(graphic: Graphic): void;
    createGraphicByOptions(options: GraphicOptions): Graphic | undefined;
    mercatorToWorld(mercator: [number, number]): Vector3;
    removePoiById(id: string): void;
    getPoiById(id: string): Poi | Poi2 | undefined;
    getPois(): (Poi | Poi2)[];
    clearPoi(): void;
    removeSelectGraphic(graphic: Graphic): void;
    resize: () => void;
    dispose(): void;
}
export {};
