import { EventBus, Position, Icon, Label, OpenInfoWindow, CloseInfoWindow, IBounds, LabelPlacement } from '.';
import { ProxyMap, Path, ILineStyle, IFillStyle, ILabelStyle } from '../types';
/** Polygon样式 */
export interface IPolygonStyle {
    /** 轮廓线 */
    line?: ILineStyle;
    /** 填充 */
    fill?: IFillStyle;
    /** 文本标签 */
    label: ILabelStyle;
}
/** Polygon配置 */
export interface IPolygon<T = any> {
    /** ID */
    id: number;
    /** 名称 */
    name?: string;
    /** 路径 */
    path: Path;
    /** 孔 */
    holes?: Path[];
    /** 样式 */
    style?: IPolygonStyle;
    /** 文本标签 */
    label?: {
        /** 文本内容 */
        text: string;
        /** 最小展示层级，地图小于此层级时默认隐藏label */
        minShowZoom?: number;
        /** 是否显示 */
        visible?: boolean;
    };
    /** 业务数据 */
    data?: T;
    /** 是否可见 */
    visible?: boolean;
}
export interface IPolygonOptions {
    labelBasePlacement?: LabelPlacement;
}
export type PolygonEventName = 'click' | 'dblclick' | 'rightclick';
/** 基础Polygon类 */
export declare abstract class BasePolygon<T = any> extends EventBus<PolygonEventName> {
    protected _top: ProxyMap;
    /** ID */
    protected _id: number;
    /** 名称 */
    protected _name?: string;
    /** 路径 */
    protected _path: Position[];
    /** 样式 */
    protected _style: IPolygonStyle;
    /** 图标 */
    protected _icon?: Icon;
    /** 文本标签 */
    protected _label?: Label;
    /** 业务数据 */
    protected _data?: T;
    /** 是否可见 */
    protected _visible: boolean;
    /** label基础方位 */
    protected _labelBasePlacement: LabelPlacement;
    constructor(_top: ProxyMap, polygon: IPolygon<T>, options: IPolygonOptions);
    private genLabel;
    /** ID */
    get id(): number;
    /** 名称 */
    get name(): string | undefined;
    /** 位置 */
    get path(): Position[];
    /** 图标 */
    get icon(): Icon | undefined;
    /** 业务数据 */
    get data(): T | undefined;
    /**
     * 设置名称
     * @param name 名称
     */
    setName(name: string): void;
    /**
     * 设置路径
     * @param path 路径
     */
    setPath(path: Path): void;
    /**
     * 设置样式
     * @param style 样式
     */
    setStyle(style: IPolygonStyle): void;
    /**
     * 设置业务数据
     * @param data 业务数据
     */
    setData(data: T): void;
    /**
     * 显示，icon、label
     */
    show(): void;
    /**
     * 隐藏，icon、label
     */
    hidden(): void;
    /**
     * 显示label
     */
    showLabel(): void;
    /**
     * 隐藏label
     */
    hiddenLabel(): void;
    /**
     * 判断坐标是否在多边形内
     */
    contains(point: Position): boolean;
}
interface PolygonInstance {
    [key: string]: any;
    remove(): void;
}
/** 抽象Polygon类 */
export declare abstract class AbstractPolygon<T = any> extends BasePolygon<T> {
    /**
     * 获取所有资源实例
     */
    abstract getInstances(): PolygonInstance[];
    /**
     * 删除多边形
     */
    abstract remove(): void;
    /**
     * 地图中心点平移至多边形
     */
    abstract panTo?(): void;
    /**
     * 设置多边形样式
     */
    abstract setStyle(option: IPolygonStyle): void;
    /**
     * 获取当前多边形的矩形范围对象
     */
    abstract getBounds?(): IBounds;
    /**
     * 获取多边形的面积（平方米）
     */
    abstract getArea?(): number;
    /**
     * 打开信息窗口
     */
    abstract openInfoWindow?: OpenInfoWindow;
    /**
     * 关闭信息窗口
     */
    abstract closeInfoWindow?: CloseInfoWindow;
}
export {};
