import "ol-ext/dist/ol-ext.css";
import OLMap from "ol/Map";
import View, { ViewOptions } from "ol/View";
import Control from "ol/control/Control";
import { Coordinate } from "ol/coordinate";
import Interaction from "ol/interaction/Interaction";
import "ol/ol.css";
import "../assets/css/style.css";
import { MapEventArgs } from "../events";
import { Extent } from "ol/extent";
import BaseLayer from "ol/layer/Base";
import Layer from "ol/layer/Layer";
import { ProjectionLike } from "ol/proj";
import { RollSwipe } from "../controls";
import LayerManager from "./LayerManager";
import { IControlOption, ILayerItem, IMapConfig } from "./Models";
import WMTSTool from "./WMTSTool";
import PrintTool from '../controls/PrintTool';
/**
 * 封装地图工具类
 */
export default class XMap {
    target: string;
    private _TDTKeys;
    map: OLMap;
    /**
     * 地图消息总线(内部+全局)
     */
    mapEventBus: import("../events").MapEventBusClass;
    private isMainSync;
    private digits;
    /**
     * 默认地图视图
     */
    private defaultHomeView;
    /**
     * 地图所属组，默认组名为map
     */
    private mapGroup;
    private _targetContainer;
    private postionStatusHTMLElement;
    private postionStatus;
    private currentPosition;
    private positionProjection;
    /**
     * 图层管理对象，与图层管理树对应使用
     */
    private layerManager;
    private isInitSuccess;
    private _WMTSTool;
    /**
     * 承载交互式组件的字段集合
     */
    InteractionsDiction: Map<string, Interaction>;
    ControlsDiction: Map<string, Control>;
    /**
     * 是否联网在线
     */
    isInternet: boolean;
    private _printTool;
    /**
     * 是否显示状态，响应式状态与地图相关
     */
    mapMenuState: {
        layerTree: boolean;
        dataPanel: boolean;
        location: boolean;
        drawTool: boolean;
        measureTool: boolean;
        swipeTool: boolean;
        otherTool: boolean;
        printTool: boolean;
        selectTool: boolean;
        popupPanel: boolean;
        tagState: boolean;
    };
    /**
     * 根据配置初始化地图
     * @param mapConfig
     * @returns
     */
    static initByMapConfig(mapConfig: IMapConfig): XMap;
    constructor(target?: string, pmapGroup?: string, hasLayerManager?: boolean);
    private mapPrj;
    private pointerMoveHandler;
    private onMapMoveEndHandler;
    private refreshPostionStatus;
    /**
     * olXmap和xmapview
     * 地图组件的外部容器ID
     */
    get targetContainer(): string;
    get CurrentPosition(): Coordinate;
    /**
     * 获得WMTSTool工具类型对象
     */
    get WMTSTool(): WMTSTool;
    /**
     * 获取打印工具对象
     */
    get PrintTool(): PrintTool;
    /**
     * 创建地图视图
     * （先准备Projection,一般在OnMounted后加载）
     * @param center
     * @param zoom
     * @param newPrj
     * @returns
     */
    initMapView(opt_options?: ViewOptions): View;
    /**
     * 一个天地图Key值（随机的一个）
     */
    get TDTKey(): string;
    set TDTKeys(value: Array<string>);
    /**
     * 添加在线图层（天地图、Arcgis、谷歌、Mapbox、Bing、高德、腾讯、百度）
     * @param layerName
     */
    addOnlineLayer(layerID: string, tdtLocalURL?: string): void;
    /**
     * 获得绑定图层管理对象
     */
    get LayerManager(): LayerManager;
    /**
     * 移除图层
     * @param map 地图对象
     * @param targetLayer 当前图层
     * @returns
     */
    removeLayer(targetLayer: Layer): BaseLayer | undefined;
    /**
     * 修改图层的顺序
     * @param map
     * @param oldIndex 原顺序
     * @param newIndex 新顺序
     */
    changeLayerOrder(oldIndex: number, newIndex: number): void;
    addDefaultControl(item: IControlOption): void;
    addDefaultInteraction(item: IControlOption): void;
    /**
     * 注销
     */
    dispose(): void;
    /**
     * 设置或更新地图视图
     * @param view
     */
    setView(view: View): void;
    /**
     * 修改地图投影
     * @param prj 新投影对象
     * @param newViewOptions 新视图ViewOptions,默认为空
     */
    setProjection(prj: ProjectionLike, newViewOptions?: ViewOptions): void;
    /**
     * 地图视图
     */
    get MapView(): View;
    /**
     * 注册地图的图层对象
     * @param layeritem
     */
    registerLayer(layer: Layer, layeritem: ILayerItem): void;
    /**
     * 按目标投影Extent范围进行定位
     * @param targetExent 目标投影访问
     */
    zoomTo(targetExent: Extent, proj?: ProjectionLike): void;
    /**
     * 图层的范围定位
     * @param extent84
     */
    zoomToExtent(extent84: Extent): void;
    /**
     * 缩放定位 中心点
     * @param center84 中心点 84坐标
     * @param level 级别(可选)
     */
    zoomToCenter(center84: Coordinate, level?: number): void;
    /**
     * 返回初始地图视图
     */
    goHomeView(): void;
    newEvtArgs(data?: any, eventObject?: any): MapEventArgs;
    /**
     * 启用地图视图-同步
     */
    enableMapSyncView(): void;
    /**
     * 取消地图视图-同步
     */
    disableMapSyncView(): void;
    private mapSyncView;
    private mapSyncViewEnd;
    /**地图原生事件绑定处理 */
    /**
     * 地图移动完
     * @param evt
     */
    private onMoveEnd;
    private onResolutionChanged;
    private swipe;
    get RollSwipe(): RollSwipe;
    DefaultInteractionKeys: {
        FishEyeClip: string;
    };
    /**
     * 添加交互式组件
     * @param key 字段Key唯一
     * @param control 交互式组件
     * @returns
     */
    addInteractionExt(key: string, control: Interaction): boolean;
    /**
     * 是否具有某个组件
     * @param key 键唯一值
     * @returns
     */
    containsInteractionExt(key: string): boolean;
    /**
     * 获得某个交互式组件
     * @param key 键唯一值
     * @returns
     */
    getInteractionExt(key: string): Interaction | undefined;
    /**
     * 移除某个交互组件
     * @param key 键值唯一
     */
    removeInteractionExt(key: string): void;
    /**
     * 清空交互式组件
     */
    clearInteractionExt(): void;
    DefaultControlKeys: {
        overview: string;
        target: string;
        scale: string;
        scaleline: string;
    };
    /**
     * 添加交互式组件
     * @param key 字段Key唯一
     * @param control 交互式组件
     * @returns
     */
    addControlExt(key: string, control: Control): boolean;
    /**
     * 是否具有某个组件
     * @param key 键唯一值
     * @returns
     */
    containsControlExt(key: string): boolean;
    /**
     * 获得某个交互式组件
     * @param key 键唯一值
     * @returns
     */
    getControlExt(key: string): Control | undefined;
    /**
     * 移除某个交互组件
     * @param key 键值唯一
     */
    removeControlExt(key: string): void;
    /**
     * 清空交互式组件
     */
    clearControlExt(): void;
}
