import { Tile } from '../types';
import * as THREE from "three";
import type * as maptilersdk from "@maptiler/sdk";
type InitProps = {
    map: maptilersdk.Map;
    minZoom: number;
    maxZoom: number;
};
declare class GlobeTilesService {
    readonly object3D: THREE.Group;
    readonly helpersObject3D: THREE.Group;
    private map;
    currentTiles: Array<Tile>;
    /**
     * Tiles mesh for data which can be tiled.
     */
    readonly currentTilesMeshes: Map<string, THREE.Mesh<THREE.BufferGeometry, THREE.Material | THREE.Material[]>>;
    /**
     * Mesh for visible tiles area - e.g. to display particles
     */
    visibleTilesAreaMesh: THREE.Mesh<THREE.BufferGeometry, THREE.Material | THREE.Material[]>;
    /**
     * Rows of vertices, rowId is a abstract identifier (related to tile but not exactly the same).
     * This is used to create full area mesh.
     */
    private areaGeometryVerticesRows;
    /**
     * Min zoom level for tiles
     */
    private minZoom;
    /**
     * Max zoom level for tiles
     * 0-24 - https://maplibre.org/maplibre-gl-js/docs/API/type-aliases/MapOptions/#maxzoom
     */
    private maxZoom;
    /**
     * Flag to check if geometry needs to be recreated (after visible tiles change).
     */
    private isGeometryNeedRefresh;
    constructor();
    /**
     * Initialize the service.
     * Using it to create the object at the beginning and initialize it map is ready.
     * The idea is to simplify calling the `update` method.
     */
    init({ map, minZoom, maxZoom }: InitProps): void;
    /**
     * Update list of tiles to display.
     */
    update(): void;
    /**
     * Recreate:
     * - each tile mesh
     * - area mesh
     */
    recreateGlobeMeshes(): void;
    /**
     * Recreate tiles meshes.
     * Used for tiling friendly data (temperature, pressure, etc.).
     */
    private recreateGlobeTiles;
    /**
     * Recreate single mesh for visible tiles area.
     * Used for particles display.
     */
    private recreateAreaMesh;
}
export { GlobeTilesService };
