import Tooltip from "../widget/type/Tooltip";
import { ViewerEvent, MouseEvent } from "../event";
import { MouseMode } from "../option";
import { T_Position } from "../common/type";
import { Compass, ContextMenu, DistanceLegend, LoadingMask, LocationBar, MapSplit, MapSwitch, Popup, SceneSplit, TilesetSplit, ZoomController, HawkeyeMap } from "../exports/widgets";
import LayerGroup from "../layer/LayerGroup";
import { Layer } from "../layer";
/**
 * 3D 场景主要接口，在给定的 DivId 中构建三维场景
 * @noInheritDoc
 * @example
 * ```html
 * <div id="viewer-container"></div>
 * ```
 *
 * ```ts
 * let viewer = BC.Viewer('viewer-container')
 * global.viewer = viewer // 添加到全局变量
 * ```
 */
declare class Viewer {
    private _delegate;
    private _viewerEvent;
    private _sceneEvent;
    private _viewerOption;
    private _cameraOption;
    private _dcContainer;
    private _baseLayerPicker;
    private _layerGroupCache;
    private _layerCache;
    private _mouseEvent;
    cesiumWidget: Cesium.CesiumWidget;
    tooltip: Tooltip;
    compass: Compass;
    popup: Popup;
    contextMenu: ContextMenu;
    mapSwitch: MapSwitch;
    mapSplit: MapSplit;
    locationBar: LocationBar;
    hawkeyeMap: HawkeyeMap;
    distanceLegend: DistanceLegend;
    zoomController: ZoomController;
    loadingMask: LoadingMask;
    tilesetSplit: TilesetSplit;
    sceneSplit: SceneSplit;
    /**
     *
     * @param id - 容器id
     * @param options - 参数
     * @example
     * ```json
     * //属性参数（可选）
     * {
     *   "contextOptions": {
     *     "webgl": {
     *       "alpha": false, //背景
     *       "depth": true,
     *       "stencil": false,
     *       "antialias": true,
     *       "powerPreference": "high-performance",
     *       "premultipliedAlpha": true,
     *       "preserveDrawingBuffer": false,
     *       "failIfMajorPerformanceCaveat": false
     *     },
     *     "allowTextureFilterAnisotropic": true
     *   },
     *   "sceneMode": 3 //1: 2.5D，2: 2D，3: 3D
     * }
     * ```
     */
    constructor(id: string | HTMLElement, options?: {});
    /**
     * 获取Cesium原生Viewer
     */
    get delegate(): Cesium.Viewer;
    /**
     * 框架自定义容器
     * @readonly
     */
    get dcContainer(): any;
    /**
     * 场景
     * @readonly
     */
    get scene(): Cesium.Scene;
    /**
     * 相机
     * @readonly
     */
    get camera(): Cesium.Camera;
    /**
     * canvas节点
     * @readonly
     */
    get canvas(): HTMLCanvasElement;
    /**
     * viewer数据源
     * @readonly
     */
    get dataSources(): Cesium.DataSourceCollection;
    /**
     * 影像类图层组
     * @readonly
     */
    get imageryLayers(): Cesium.ImageryLayerCollection;
    /**
     * 地形
     * @readonly
     */
    get terrainProvider(): Cesium.TerrainProvider;
    /**
     * 实体集合
     * @readonly
     */
    get entities(): Cesium.EntityCollection;
    /**
     * 预处理集合
     * @readonly
     */
    get postProcessStages(): Cesium.PostProcessStageCollection;
    /**
     * 时钟
     */
    get clock(): Cesium.Clock;
    /**
     * viewer私有事件
     */
    get viewerEvent(): ViewerEvent;
    get mouseEvent(): MouseEvent;
    /**
     * 摄像头位置
     */
    get cameraPosition(): import("../position/Position").default;
    /**
     * 层级
     */
    get resolution(): number;
    /**
     * 当前视角范围
     */
    get viewBounds(): Cesium.Rectangle;
    /**
     * 层级
     */
    get level(): any;
    /***
     * 添加图层组
     * @param layerGroup - 图层组
     * @private
     */
    _addLayerGroup(layerGroup: LayerGroup): void;
    /**
     *
     * @param layerGroup
     * @private
     */
    private _removeLayerGroup;
    /**
     * 添加图层
     * @param layer - 图层
     * @private
     */
    private _addLayer;
    /**
     * 移除图层
     * @param layer 图层
     * @private
     */
    _removeLayer(layer: Layer): void;
    /**
     * 设置属性
     * @param options 属性
     * @returns {Viewer}
     * @example
     * ```json
     * // 属性参数(可选)
     * {
     *   "shadows": false, // 是否开启阴影
     *   "resolutionScale": 1, // 设置渲染分辨率的缩放比例
     *   "showAtmosphere": true, //是否显示大气层
     *   "showSun": true, //是否显示太阳
     *   "showMoon": true, //是否显示月亮
     *   "enableFxaa": true, //是否开启抗锯齿
     *   "msaaSamples": 1, //msaa抗拒出取样度
     *   "cameraController": {
     *     // 相机控制
     *     "enableRotate": true, // 是否可以旋转
     *     "enableTilt": true, // 是否可以翻转
     *     "enableTranslate": true, // 是否可以平移
     *     "enableZoom": true, // 是否可以缩放
     *     "enableCollisionDetection": true, // 是否支持碰撞检测
     *     "minimumZoomDistance": 1.0, // 最小缩放距离
     *     "maximumZoomDistance": 40489014.0 // 最大缩放距离
     *   },
     *   "globe": {
     *     "show": true, // 是否显示地球
     *     "showGroundAtmosphere": true, // 显示地面大气
     *     "enableLighting": false, //是否开启灯光，开启后地球会根据当前时间启用灯光
     *     "depthTestAgainstTerrain": false, //是否开启深度检测
     *     "tileCacheSize": 100, // 默认瓦片缓存大小
     *     "preloadSiblings": false, //是否应预加载渲染同级图块
     *     "terrainExaggeration": 1, //地形夸张系数
     *     "terrainExaggerationRelativeHeight": 1, //地形相对高度夸张系数
     *     "baseColor": new DC.Color(0, 0, 0.5, 1), //地球默认底色
     *     "filterColor": new DC.Color(0, 0, 0, 0), //瓦片过滤色
     *     "translucency": {
     *       //地表透明
     *       "enabled": false, // 是否开启地表透明
     *       "backFaceAlpha": 1, // 地球背面透明度
     *       "backFaceAlphaByDistance": null, //根据距离设置地球背面透明度: {near:400,nearValue:0.2,far:800,farValue:1}
     *       "frontFaceAlpha": 1, // 地球正面透明度
     *       "frontFaceAlphaByDistance": null //根据距离设置地球正面透明度: {near:400,nearValue:0.2,far:800,farValue:1}
     *     }
     *   },
     *   "skyBox": {
     *     "sources": {}, // 六个面的贴图
     *     "show": true, //是否显示
     *     "offsetAngle": 0 //旋转角度
     *   }
     * }
     * ```
     */
    setOptions(options: any): this;
    /**
     * 设置翻转角度
     * @param min 最小角度
     * @param max 最大角度
     * @returns {Viewer}
     */
    setPitchRange(min?: number, max?: number): this;
    /**
     * @param west
     * @param south
     * @param east
     * @param north
     * @returns {Viewer}
     */
    setBounds(west: any, south: any, east: any, north: any): this;
    /**
     * 改变场景模式，
     * @param sceneMode - 场景模式 2：2D，2.5：2.5D，3：3D
     * @param duration - 间隔时间
     * @returns {Viewer}
     */
    changeSceneMode(sceneMode: any, duration?: number): this;
    /**
     * 改变鼠标使用模式
     * @param mouseMode - 鼠标模式
     * @returns {Viewer}
     */
    changeMouseMode(mouseMode: MouseMode): this;
    /**
     * 添加基础图层
     * @param baseLayers 基础地图图层
     * @param options 属性
     * @returns {Viewer}
     */
    addBaseLayer(baseLayers: Cesium.ImageryProvider | Cesium.TerrainProvider | Array<Cesium.ImageryProvider> | Array<Cesium.TerrainProvider>, options?: any): this;
    /**
     * 修改基础图层
     * @param index 图层索引
     * @returns {Viewer}
     */
    changeBaseLayer(index: any): this;
    /**
     *
     * @param windowPosition
     * @returns {Promise}
     */
    getImageryLayerInfo(windowPosition: any): Promise<Cesium.ImageryLayerFeatureInfo[]>;
    /**
     * 添加地形
     * @param terrain 地形图层
     * @param options 属性
     * @returns {Viewer}
     */
    addTerrain(terrain: any, options?: any): this;
    /**
     * 修改地形
     * @param index 图层索引
     * @returns {Viewer}
     */
    changeTerrain(index: any): this;
    /**
     * 移除地形
     * @returns {Viewer}
     */
    removeTerrain(): this;
    /**
     * 添加图层组
     * @param layerGroup 图层组
     * @returns {Viewer}
     */
    addLayerGroup(layerGroup: LayerGroup): this;
    /**
     * 移除图层组
     * @param layerGroup - 图层组
     * @returns {Viewer}
     */
    removeLayerGroup(layerGroup: LayerGroup): this;
    /**
     * 根据id获取图层组
     * @param id - 图层组id
     * @returns {undefined}
     */
    getLayerGroup(id: string): LayerGroup;
    /**
     * 添加图层
     * @param layer
     * @returns {Viewer}
     */
    addLayer(layer: Layer): this;
    /**
     * 移除图层
     * @param layer 图层
     * @returns {Viewer}
     */
    removeLayer(layer: Layer): this;
    /**
     * 检查是否有某个图层
     * @param layer
     * @returns {boolean}
     */
    hasLayer(layer: Layer): boolean;
    /**
     * 根据id获取图层
     * @param id
     * @returns {*|undefined}
     */
    getLayer(id: string): any;
    /**
     * 获取全部图层
     * @returns {[]}
     */
    getLayers(): any[];
    /**
     * 遍历所有图层
     * @param method 回调函数
     * @param context 上下文
     * @returns {Viewer}
     */
    eachLayer(method: Function, context: any): this;
    /**
     * 根据图层属性获取图层
     * @param attrName 属性名称
     * @param attrVal 属性值
     * @returns 图层数组
     */
    getLayersByAttr(attrName: string, attrVal: any): Layer[];
    /**
     * 飞行到
     * @param target - 目标
     * @param duration -飞到位置的时间（s）
     * @returns {Viewer}
     */
    flyTo(target: any, duration?: number): this;
    /**
     * 缩放到
     * @param target 目标
     * @returns {Viewer}
     */
    zoomTo(target: any): this;
    /**
     * 飞到具体位置
     * @param position 坐标
     * @param completeCallback 回调函数
     * @param duration 间隔时间
     * @returns {Viewer}
     */
    flyToPosition(position: T_Position, completeCallback: any, duration: any): this;
    /**
     * 缩放到具体位置
     * @param position 位置
     * @param completeCallback 回调函数
     * @returns {Viewer}
     */
    zoomToPosition(position: T_Position, completeCallback: any): this;
    /**
     * 飞到指定范围
     * @param bounds 范围
     * @param hpr 方位角
     * @param completeCallback 回调函数
     * @param duration 间隔时间
     * @return {Viewer}
     */
    flyToBounds(bounds: any, { heading, pitch, roll }: {
        heading?: number;
        pitch?: number;
        roll?: number;
    }, completeCallback: any, duration?: any): this;
    /**
     * 缩放到指定范围
     * @param bounds 范围
     * @param hpr 方位角
     * @param completeCallback 回调函数
     * @return {Viewer}
     */
    zoomToBounds(bounds: any, { heading, pitch, roll }: {
        heading?: number;
        pitch?: number;
        roll?: number;
    }, completeCallback: any): this;
    /**
     * 事件订阅
     * @param type 类型
     * @param callback 回调函数
     * @param context 上下文
     * @returns {Viewer}
     */
    on(type: any, callback: any, context: any): this;
    /**
     * 事件订阅一次
     * @param type 类型
     * @param callback 回调函数
     * @param context 上下文
     * @returns {Viewer}
     */
    once(type: any, callback: any, context: any): this;
    /**
     * 事件订阅取消
     * @param type 类型
     * @param callback 回调函数
     * @param context 上下文
     * @returns {Viewer}
     */
    off(type: any, callback: any, context: any): this;
    /**
     * 销毁
     */
    destroy(): this;
    /**
     * 导出场景
     * @param name
     * @returns {Viewer}
     */
    exportScene(name: string): this;
    /**
     * @hidden
     * @param plugin
     * @returns {Viewer}
     */
    use(plugin: any): this;
    /**
     * @hidden
     * @param plugin
     * @returns {Viewer}
     */
    unuse(plugin: any): this;
}
export default Viewer;
