import { Map } from 'ol';
import { Extent } from 'ol/extent';
import { FeatureHighlightManager } from './FeatureHighlightManager';
import { LayerHighlightConfig } from '../types';

export interface GeoJSONObject {
    type: string;
    features?: GeoJSONObject[];
    geometry?: {
        type: string;
        coordinates: any[];
        [key: string]: any;
    };
    coordinates?: any[];
    properties?: Record<string, any>;
    [key: string]: any;
}
export type GeoJSONInput = GeoJSONObject | string;
/**
 * GeoJSON 定位工具类
 * 提供各种 GeoJSON 数据的定位功能
 */
export declare class GeoJSONLocationTool {
    private map;
    private format;
    private featureHighlightManager?;
    constructor(map: Map, featureHighlightManager?: FeatureHighlightManager);
    /**
     * 定位到 GeoJSON 数据
     * @param geoJsonData GeoJSON 数据（可以是 Feature、FeatureCollection 或 Geometry）
     * @param options 定位选项
     */
    locateToGeoJSON(geoJsonData: GeoJSONInput, options?: {
        padding?: number[];
        maxZoom?: number;
        duration?: number;
        minZoom?: number;
        showMessage?: boolean;
        style?: LayerHighlightConfig["style"];
        highlight?: boolean;
        clearPrevious?: boolean;
    }): boolean;
    /**
     * 定位到单个 GeoJSON 要素的中心点
     * @param geoJsonFeature 单个 GeoJSON Feature
     * @param options 定位选项
     */
    locateToGeoJSONCenter(geoJsonFeature: GeoJSONInput, options?: {
        zoom?: number;
        duration?: number;
        showMessage?: boolean;
        style?: LayerHighlightConfig["style"];
        highlight?: boolean;
        clearPrevious?: boolean;
    }): boolean;
    /**
     * 批量定位多个 GeoJSON 要素
     * @param geoJsonFeatures GeoJSON Feature 数组
     * @param options 定位选项
     */
    locateToMultipleGeoJSON(geoJsonFeatures: GeoJSONInput[], options?: {
        padding?: number[];
        maxZoom?: number;
        duration?: number;
        minZoom?: number;
        showMessage?: boolean;
        style?: LayerHighlightConfig["style"];
        highlight?: boolean;
        clearPrevious?: boolean;
    }): boolean;
    /**
     * 根据属性条件定位 GeoJSON 要素
     * @param geoJsonData GeoJSON 数据
     * @param propertyFilter 属性过滤条件
     * @param options 定位选项
     */
    locateByProperty(geoJsonData: GeoJSONInput, propertyFilter: (properties: Record<string, any>) => boolean, options?: {
        padding?: number[];
        maxZoom?: number;
        duration?: number;
        minZoom?: number;
        showMessage?: boolean;
    }): boolean;
    /**
     * 定位到指定几何类型的要素
     * @param geoJsonData GeoJSON 数据
     * @param geometryType 几何类型（Point, LineString, Polygon 等）
     * @param options 定位选项
     */
    locateByGeometryType(geoJsonData: GeoJSONInput, geometryType: string, options?: {
        padding?: number[];
        maxZoom?: number;
        duration?: number;
        minZoom?: number;
        showMessage?: boolean;
    }): boolean;
    /**
     * 计算要素集合的边界范围
     * @param features 要素数组
     * @returns 边界范围或null
     */
    private calculateFeaturesExtent;
    /**
     * 获取 GeoJSON 数据的边界范围（不进行定位）
     * @param geoJsonData GeoJSON 数据
     * @returns 边界范围或null
     */
    getGeoJSONExtent(geoJsonData: GeoJSONInput): Extent | null;
    /**
     * 更新地图实例
     * @param map 新的地图实例
     */
    updateMap(map: Map): void;
}
export default GeoJSONLocationTool;
//# sourceMappingURL=geoJsonLocationTool.d.ts.map