import { CanvasSourceSpecification, LayerSpecification } from 'maplibre-gl';
import type { AnyCanvas, AnyMapGlMap } from '../../types';
import RealtimeEngine, { RealtimeEngineOptions } from '../../common/utils/RealtimeEngine';
import Layer, { LayerOptions } from './Layer';
export type RealtimeLayerOptions = LayerOptions & RealtimeEngineOptions;
/**
 * A Maplibre layer able to display data from the [geOps Realtime API](https://developer.geops.io/apis/realtime/).
 *
 * @example
 * import { Map } from 'maplibre-gl';
 * import { RealtimeLayer } from 'mobility-toolbox-js/maplibre';
 *
 * // Define the map
 * const map = new Map({ ... });
 *
 * // Define your layer map
 * const layer = new RealtimeLayer({
 *   apiKey: "yourApiKey"
 *   // url: "wss://api.geops.io/tracker-ws/v1/",
 * });
 *
 * // Add the layer to your map *
 * map.on('load', () => {
 *   map.addLayer(layer);
 * });
 *
 *
 * @see <a href="/api/class/src/api/RealtimeAPI%20js~RealtimeAPI%20html">RealtimeAPI</a>
 * @see <a href="/example/mb-realtime>MapLibre Realtime layer example</a>
 *
 * @implements {maplibregl.CustomLayerInterface}
 * @extends {maplibregl.Evented}
 * @classproperty {function} filter - Filter out a train. This function must be fast, it is executed for every trajectory on every render frame.
 * @classproperty {RealtimeMode} mode - The realtime mode to use.
 * @classproperty {RealtimeMot[]} mots - Filter trains by its mode of transportation. It filters trains on backend side.
 * @classproperty {RealtimeTenant} tenant - Filter trains by its tenant. It filters trains on backend side.
 * @classproperty {function} sort - Sort trains. This function must be fast, it is executed on every render frame.
 * @classproperty {function} style - Function to style the vehicles.
 s
 * @public
 */
declare class RealtimeLayer extends Layer {
    #private;
    engine: RealtimeEngine;
    layer: LayerSpecification;
    source: CanvasSourceSpecification;
    sourceId: string;
    get canvas(): AnyCanvas | undefined;
    get pixelRatio(): number | undefined;
    set pixelRatio(pixelRatio: number | undefined);
    /**
     * Constructor.
     *
     * @param {RealtimeLayerOptions} options
     * @param {string} options.apiKey Access key for [geOps apis](https://developer.geops.io/).
     * @param {FilterFunction} options.filter Filter out a train. This function must be fast, it is executed for every trajectory on every render frame.
     * @param {getMotsByZoomFunction} options.getMotsByZoom Returns for each zoom level the list of MOTs to display. It filters trains on backend side.
     * @param {number} [options.minZoomInterpolation=8] Minimal zoom level where to start to interpolate train positions.
     * @param {RealtimeMode} [options.mode='topographic'] The realtime mode to use.
     * @param {SortFunction} options.sort Sort trains. This function must be fast, it is executed on every render frame.
     * @param {RealtimeStyleFunction} options.style Function to style the vehicles.
     * @param {RealtimeTenant} options.tenant Filter trains by its tenant. It filters trains on backend side.
     * @param {string} [options.url="wss://api.geops.io/tracker-ws/v1/"] The geOps Realtime API url.
     */
    constructor(options?: RealtimeLayerOptions);
    /**
     * Return the current view state. Used by the RealtimeEngine.
     * @private
     */
    getViewState(): {
        center?: undefined;
        extent?: undefined;
        pixelRatio?: undefined;
        resolution?: undefined;
        rotation?: undefined;
        size?: undefined;
        visible?: undefined;
        zoom?: undefined;
    } | {
        center: import("ol/coordinate").Coordinate;
        extent: number[];
        pixelRatio: number;
        resolution: number;
        rotation: number;
        size: number[];
        visible: boolean;
        zoom: number;
    };
    /**
     * Add sources, layers and listeners to the map.
     */
    onAdd(map: AnyMapGlMap, gl: WebGL2RenderingContext | WebGLRenderingContext): void;
    onLoad(): void;
    /**
     * Callback on 'move' event.
     */
    onMove(): void;
    /**
     * Callback on 'moveend' event.
     */
    onMoveEnd(): void;
    /**
     * Callback when the RealtimeEngine has rendered successfully.
     */
    onRealtimeEngineRender(): void;
    /**
     * Remove source, layers and listeners from the map.
     */
    onRemove(map: AnyMapGlMap, gl: WebGL2RenderingContext | WebGLRenderingContext): void;
    onZoomEnd(): void;
    /**
     * Start updating vehicles position.
     *
     * @public
     */
    start(): void;
    /**
     * Stop updating vehicles position.
     *
     * @public
     */
    stop(): void;
}
export default RealtimeLayer;
