import { LayersService, TGeoExtent, TFiltertypesUncap, TFiltertypes, Layer, CustomLayer } from '@dlr-eoc/services-layers';
import * as i0 from '@angular/core';
import { OnInit, AfterViewInit, OnDestroy, ElementRef } from '@angular/core';
import { MapStateService, IMapCenter } from '@dlr-eoc/services-map-state';
import { Subscription, Subject } from 'rxjs';
import { Viewer } from '@cesium/widgets';
import { JulianDate, Color, ImageryLayer, DataSource } from '@cesium/engine';

interface ICesiumControls {
    timeline?: boolean;
    animation?: boolean;
    sceneModePicker?: boolean;
    homeButton?: boolean;
    baseLayerPicker?: boolean;
    geocoder?: boolean;
    navigationHelpButton?: boolean;
    navigationInstructionsInitiallyVisible?: boolean;
    fullscreenButton?: boolean;
    scene3DOnly?: boolean;
    infoBox?: boolean;
    selectionIndicator?: boolean;
    enablePopups?: boolean;
    ionAccessToken?: string;
    GoogleMapsApiKey?: string;
    globeColor?: string;
}
declare class MapCesiumComponent implements OnInit, AfterViewInit, OnDestroy {
    private mapSvc;
    mapDivView: ElementRef;
    creditDivView: ElementRef;
    twoDlayersSvc: LayersService;
    threeDlayersSvc: LayersService;
    mapStateSvc: MapStateService;
    controls: ICesiumControls;
    timeInterval?: string[];
    startTime?: string | null;
    viewer: Viewer;
    subs: Subscription[];
    mapCreated: Subject<boolean>;
    initState: boolean;
    constructor(mapSvc: MapCesiumService);
    ngOnInit(): void;
    ngAfterViewInit(): void;
    ngOnDestroy(): void;
    private initMap;
    private subscribeToLayers;
    private subscribeToMapState;
    private setMapState;
    private calcMapStateFromCamera;
    private subscribeToMapEvents;
    private addUpdateBaseLayers;
    private add2DBaseLayers;
    private update2DBaseLayers;
    private addUpdateTerrainLayers;
    private addTerrainLayers;
    private addUpdate2DLayers;
    private addLayers;
    private updateLayers;
    private addUpdate3DLayers;
    private add3DLayers;
    private update3DLayers;
    closeCesiumPopup(): void;
    static ɵfac: i0.ɵɵFactoryDeclaration<MapCesiumComponent, never>;
    static ɵcmp: i0.ɵɵComponentDeclaration<MapCesiumComponent, "ukis-map-cesium", never, { "twoDlayersSvc": { "alias": "twoDlayersSvc"; "required": false; }; "threeDlayersSvc": { "alias": "threeDlayersSvc"; "required": false; }; "mapStateSvc": { "alias": "mapState"; "required": false; }; "controls": { "alias": "controls"; "required": false; }; "timeInterval": { "alias": "timeInterval"; "required": false; }; "startTime": { "alias": "startTime"; "required": false; }; }, {}, never, never, true, never>;
}

declare type Tgroupfiltertype = TFiltertypesUncap | TFiltertypes;
declare class MapCesiumService {
    viewer: Viewer;
    private baseLayerImageryGroup;
    private standardLayerImageryGroup;
    private overlayLayerImageryGroup;
    private baseLayerDataSourceGroup;
    private standardLayerDataSourceGroup;
    private overlayLayerDataSourceGroup;
    private dataSourceOpacity;
    private terrainLayerGroup;
    private tilesetLayerGroup;
    EPSG: string;
    cesiumCurrentTime: JulianDate;
    private cesiumTimeInterval;
    private viewerOptions;
    defaultGlobeColor: Color;
    constructor();
    setControls(newControls: ICesiumControls): void;
    createMap(target: HTMLElement): {
        viewer: Viewer;
    };
    setZoom(zoom: number, notifier?: 'map' | 'user'): void;
    getZoom(): number;
    setCenter(center: IMapCenter): void;
    getCenter(): IMapCenter;
    setExtent(extent: TGeoExtent, geographic?: boolean, fitOptions?: any): void;
    getCurrentExtent(): TGeoExtent;
    /**
      *  Set initial oblique view, see https://cesium.com/learn/cesiumjs/ref-doc/Camera.html
      *  subtract 90°, to get the same behavior as in openlayers
      *  options of viewer.camera.flyTo`
      *
      * https://github.com/CesiumGS/cesium/blob/99d6fffe20d9cf19f2d70de97777dc00a435bc5e/packages/engine/Source/Scene/Camera.js#L1457
      * https://github.com/CesiumGS/cesium/blob/99d6fffe20d9cf19f2d70de97777dc00a435bc5e/packages/engine/Source/Scene/Camera.js#L3540-L3541
      */
    setViewAngle(viewAngle: number, options?: any): void;
    /**
     * @param options of viewer.camera.flyTo
     */
    setNadirViewAngle(options?: any): void;
    getViewAngle(): number;
    /**
      *  subtract rotation degree from 360° to get the same behavior as in openlayers
      *  options of viewer.camera.flyTo`
      *
      * https://github.com/CesiumGS/cesium/blob/99d6fffe20d9cf19f2d70de97777dc00a435bc5e/packages/engine/Source/Scene/Camera.js#L3424
      * https://github.com/CesiumGS/cesium/blob/99d6fffe20d9cf19f2d70de97777dc00a435bc5e/packages/engine/Source/Scene/Camera.js#L1456
      */
    setRotation(rotation: number, options?: any): void;
    getRotation(): number;
    getAll2DLayersSize(filtertype: Tgroupfiltertype): number;
    get2DImageryLayersSize(filtertype: Tgroupfiltertype): number;
    getDataSourceLayersSize(filtertype: Tgroupfiltertype): number;
    getVisible2DLayersSize(filtertype: Tgroupfiltertype): number;
    get3DLayersSize(filtertype: Tgroupfiltertype): number;
    getVisible3DLayersSize(filtertype: Tgroupfiltertype): number;
    set2DUkisLayers(layers: Array<Layer>, filtertype: Tgroupfiltertype): void;
    set3DUkisLayers(layers: Array<Layer>, filtertype: Tgroupfiltertype): void;
    private create_2D_layer;
    private create_3D_layer;
    private create_xyz_layer;
    private create_wms_layer;
    private create_wmts_layer;
    private create_tms_layer;
    private create_dataSource_layer;
    private create_geojson_layer;
    private create_kml_layer;
    getLayerById(id: string, filtertype: Tgroupfiltertype): ImageryLayer | DataSource | undefined;
    removeAll2DLayers(): void;
    remove2DLayers(filtertype: Tgroupfiltertype): void;
    remove2DLayer(layerId: string[], filtertype: Tgroupfiltertype): void;
    removeAll3DLayers(): void;
    remove3DLayers(filtertype: Tgroupfiltertype): void;
    remove3DLayer(layerId: string[], filtertype: Tgroupfiltertype): void;
    update2DLayerOpacity(layers: Layer[], filtertype: Tgroupfiltertype): void;
    update2DLayerVisibility(layers: Layer[], filtertype: Tgroupfiltertype): void;
    update2DLayerZIndex(layers: Layer[], filtertype: Tgroupfiltertype): void;
    updateDataSourceZIndex(layers: Layer[], filtertype: Tgroupfiltertype): void;
    setTerrain(terrainLayer: CustomLayer): void;
    setDefaultTerrain(): void;
    removeTerrain(): void;
    private create_3Dtileset_layer;
    private dataCallback;
    update3DLayerVisibility(layers: Layer[], filtertype: Tgroupfiltertype): void;
    update3DLayerOpacity(layers: Layer[], filtertype: Tgroupfiltertype): void;
    initTime(startTime: string): void;
    updateTime(newTime: string): void;
    setTimeInterval(times: string[]): void;
    addIonAccessToken(token: string): void;
    addGoogleMapsApiKey(key: string): void;
    destroyLayerGrpoups(): void;
    static ɵfac: i0.ɵɵFactoryDeclaration<MapCesiumService, never>;
    static ɵprov: i0.ɵɵInjectableDeclaration<MapCesiumService>;
}

export { MapCesiumComponent, MapCesiumService };
export type { ICesiumControls };
