import { PerspectiveCamera, Scene, WebGLRenderer, Object3D } from 'three';
import MyCameraControls from './myCameraControls';
import { Events, IOptions, IStyle, IViewMode } from './index.type';
import { Handler } from 'mitt';
import { PoisLayer } from '../poisLayer';
import ParkingLayer from '../parkingLayer';
import { IControl } from '../controls/index.type';
export default class _Map {
    container: string;
    options: IOptions;
    private stats?;
    scene: Scene;
    camera: PerspectiveCamera;
    $map: HTMLElement;
    renderer: WebGLRenderer;
    private updateSizeMap;
    private emitter;
    private timer;
    private viewChanged;
    cameraControls: MyCameraControls;
    constructor(container: string, { style, showStats, viewMode }?: IOptions);
    getScene(): Scene;
    /**
     * @desc 二封 scene.add
     * to do：
     * - 需要判断新增的 layer 是否重名，判断 name 属性
     */
    add(...object: Object3D[] | PoisLayer[] | ParkingLayer[]): this;
    remove(...object: Object3D[] | PoisLayer[]): this;
    on<Key extends keyof Events>(type: Key, handler: Handler<Events[Key]>, ext?: Record<string, any>): this;
    off<Key extends keyof Events>(type: Key, handler?: Handler<Events[Key]>): this;
    /**
     * @desc 重渲染，为了提高性能，往场景添加元素，需要调用 redraw
     * 箭头函数，保证 this 指向正确
     */
    reDraw: (time?: number) => void;
    /**
     * @desc 初始化地图：场景，相机，灯光，渲染器，rendererResize，轨道控制器
     */
    private init;
    /**
     * @desc 相机控制器
     */
    private createCameraControls;
    /**
     * @desc 恢复到相机的初始状态
     */
    reset(): this;
    destroy(): void;
    /**
     * @desc 添加地图上的控件，如二三维切换器，缩放器等
     */
    addControl(control: IControl): this;
    /**
     * @desc 添加地图上的辅助对象，如灯光线条或者
     */
    addHelper(): this;
    setStyle(style: keyof IStyle): this;
    setShowStats(showStats: boolean): this;
    setViewMode(viewMode: IViewMode): this;
    fitToBox2d(): void;
    fitToBox3d(): void;
}
