import EventEmitter from '@antv/event-emitter';
import Source from '@antv/l7-source';
import { Scene, SourceOptions, ICompositeLayer, CompositeLayerType, LayerBlend, ICoreLayer, ISource } from '../types';
import { LayerGroup } from './layer-group';
/**
 * 复合图层的基础配置
 */
export interface CompositeLayerOptions {
    /** 图层名称 */
    name?: string;
    /** 图层 ID */
    id?: string;
    /** 图层 zIndex */
    zIndex?: number;
    /**
     * 图层是否可见
     * @default true
     */
    visible?: boolean;
    /** 图层最小可见层级 */
    minZoom?: number;
    /** 图层最大可见层级 */
    maxZoom?: number;
    /**
     * 图层拾取缓存配置，
     * 如 1px 宽度的线鼠标很难拾取到, 通过设置该参数可扩大拾取的范围
     * @default 0
     * */
    pickingBuffer?: number;
    /**
     * 图层加载成功后是否自动定位到图层数据可见范围，注意开启后图层数据发生更新时，地图也会自动缩放到图层的数据边界范围
     * @default false
     */
    autoFit?: boolean;
    /**
     * 图层元素混合效果
     * @default 'normal'
     * */
    blend?: LayerBlend;
    /** 数据配置 */
    source: {
        /** 数据 */
        data: any;
    };
}
export declare abstract class CompositeLayer<O extends CompositeLayerOptions> extends EventEmitter implements ICompositeLayer {
    /**
     * 复合图层类型
     */
    static LayerType: typeof CompositeLayerType;
    /**
     * 默认的 options 配置项
     */
    static DefaultOptions: Partial<CompositeLayerOptions>;
    /**
     * 是否是复合图层
     */
    readonly isComposite = true;
    /**
     * 复合图层名称
     */
    readonly name: string;
    /**
     * 图层 ID
     */
    readonly id: string;
    /**
     * 复合图层类型
     */
    abstract readonly type: CompositeLayerType | string;
    /**
     * 复合图层的 schema 配置
     */
    options: O;
    /**
     * 复合图层上一次的 schema 配置
     */
    lastOptions: O;
    /**
     * Scene 实例
     */
    protected scene: Scene | undefined;
    /**
     * 主子图层实例
     */
    protected abstract readonly layer: ICoreLayer;
    /**
     * 图层是否具有交互效果，用于 tooltip
     */
    abstract readonly interaction: boolean;
    /**
     * 图层间共享 source 实例
     */
    source: ISource;
    /**
     * 子图层组
     */
    subLayers: LayerGroup;
    constructor(options: O);
    /**
     * 获取默认配置
     */
    getDefaultOptions(): Partial<CompositeLayerOptions>;
    /**
     * 创建图层间共享 source 方法
     */
    protected createSource(): ISource | Source;
    /**
     * 判断 source 是否是实例工具方法
     */
    protected isSourceInstance(source: SourceOptions | ISource): source is ISource;
    /**
     * 创建子图层
     */
    protected abstract createSubLayers(): ICoreLayer[];
    /**
     * 设置子图层数据
     *支持 source 配置项与 source 实例更新
     */
    protected setSubLayersSource(source: SourceOptions | ISource): void;
    /**
     * 初始化子图层相关事件绑定
     */
    protected initSubLayersEvent(): void;
    /**
     * 添加到场景
     */
    addTo(scene: Scene): void;
    /**
     * 从场景移除
     */
    remove(): void;
    /**
     * 更新
     */
    update(options: Partial<O>): void;
    /**
     * 更新: 更新配置
     */
    updateOption(options: Partial<O>): void;
    /**
     * 更新子图层
     */
    protected abstract updateSubLayers(options: Partial<O>): void;
    render(): void;
    /**
     * 更新数据
     */
    changeData(source: SourceOptions): void;
    /**
     * 设置图层 zIndex
     */
    setIndex(zIndex: number): void;
    /**
     * 设置图层 blend
     */
    setBlend(blend: LayerBlend): void;
    /**
     * 设置图层 minZoom
     */
    setMinZoom(minZoom: number): void;
    /**
     * 设置图层 maxZoom
     */
    setMaxZoom(maxZoom: number): void;
    /**
     * 显示图层
     */
    show(): void;
    /**
     * 隐藏图层
     */
    hide(): void;
    /**
     * 切换图层显隐状态
     */
    toggleVisible(): void;
    /**
     * 图层是否可见
     */
    isVisible(): boolean | undefined;
    /**
     * 定位到当前图层数据范围
     */
    fitBounds(fitBoundsOptions?: unknown): void;
    /**
     * 获取图例数据
     */
    getLegendItems(type: string): Record<string, any>[];
    /**
     * 获取颜色图例数据
     */
    getColorLegendItems(): Record<string, any>[];
    /**
     * 摧毁
     */
    destroy(): void;
    /**
     * 事件代理: 绑定事件
     */
    on(name: string, callback: (...args: any[]) => void): this;
    /**
     * 事件代理: 绑定一次事件
     */
    once(name: string, callback: (...args: any[]) => void): this;
    /**
     * 事件代理: 解绑事件
     */
    off(name: string, callback: (...args: any[]) => void): this;
}
