import { IOwsContext, IOwsResource, IOwsOffering, IOwsOperation, IOwsContent } from './types/owc-json';
import { IEocOwsContext, IEocOwsResource, IEocOwsOffering, IEocOwsResourceDimension, IEocOwsTimeDimension } from './types/eoc-owc-json';
import { VectorLayer, RasterLayer, Layer, TLayertype, ILayerDimensions, ILayerIntervalAndPeriod, TFiltertypes, LayerGroup, ILayerTimeDimension, ILayerElevationDimension, StackedLayer } from '@dlr-eoc/services-layers';
import { TGeoExtent } from '@dlr-eoc/services-map-state';
import { WmtsClientService } from '../wmts/wmtsclient.service';
import { Observable } from 'rxjs';
import { HttpClient } from '@angular/common/http';
import * as i0 from "@angular/core";
export declare function shardsExpand(v: string): string[];
/**
 * OWS Context Service
 * OGC OWS Context Geo Encoding Standard Version: 1.0
 * http://docs.opengeospatial.org/is/14-055r2/14-055r2.html
 * http://www.owscontext.org/owc_user_guide/C0_userGuide.html
 *
 * This service allows you to read and write OWC-data.
 * We have added some custom fields to the OWC standard.
 *   - accepts the OWC-standard-data-types as function inputs (so as to be as general as possible)
 *   - returns our extended OWC-data-types as function outputs (so as to be as information-rich as possible)
 *
 * As a policy, this services does *not* make any HTTP requests to GetCapabilities (or similar) to gather
 * additional information (with very few exceptions) - we want to save on network traffic.
 * However there are scripts that auto-generate OWC files from Capabilities, those, of course,
 * *do* scrape as much information online as possible; But they are not intended to be used in
 * a live-application. Run them batch-wise and server-side instead.
 */
export declare class OwcJsonService {
    private wmtsClient;
    private http;
    constructor(wmtsClient: WmtsClientService, http: HttpClient);
    checkContext(context: IOwsContext): boolean;
    getContextTitle(context: IOwsContext): string;
    getContextPublisher(context: IOwsContext): string;
    getContextExtent(context: IOwsContext): import("geojson").BBox;
    getResources(context: IOwsContext): IOwsResource[];
    /**
     * Get Resources whith Folder property but not including Layer-Filtertypes
     */
    getGroupResources(context: IOwsContext): IOwsResource[];
    /**
     * Get Resources without Folder property or Folder is only Layer-Filtertypes
     */
    getSingleResources(context: IOwsContext): IOwsResource[];
    /** Resource --------------------------------------------------- */
    getResourceTitle(resource: IOwsResource): string;
    /**
     * The Folder property of IOwsResource
     * @returns string | `${TFiltertypes}/string`
     */
    getResourceFolder(resource: IOwsResource): string;
    /**
     * returns name from Resource Folder if it is not only a Filtertype `TFiltertypes`
     */
    private getLayerGroupFromFolder;
    /**
     * FilterType in IOwsResource Folder property
     */
    getFilterType(resource: IOwsResource): TFiltertypes;
    getResourceUpdated(resource: IOwsResource): string;
    getResourceDate(resource: IOwsResource): string;
    getResourceOfferings(resource: IOwsResource): IOwsOffering[];
    /**
     * retrieve layer status active / inactive based on IOwsResource
     * @param resource: IOwsResource
     */
    isActive(resource: IOwsResource): boolean;
    getResourceDescription(resource: IOwsResource): string;
    /** OWS Extenson IEocOwsResource */
    getResourceOpacity(resource: IEocOwsResource): number;
    /** OWS Extenson IEocOwsResource */
    getResourceAttribution(resource: IEocOwsResource): string;
    /** OWS Extenson IEocOwsResource */
    getResourceShards(resource: IEocOwsResource): string;
    /** OWS Extenson IEocOwsResource */
    getResourceMinMaxZoom(resource: IEocOwsResource, targetProjection?: string): {
        minZoom: number;
        maxZoom: number;
    };
    /**
     * e.g.
     * (array)   value: '1984-01-01T00:00:00.000Z/1989-12-31T23:59:59.000Z/PT1S,1990-01-01T00:00:00.000Z/1994-12-31T23:59:59.000Z/PT1S,...'
     * (array)   value: '1984-01-01T00:00:00.000Z/P1D,P1D/2000-01-01T00:00:00.000Z,...'
     * (array)   value: '2000-01-01T00:00:00.000Z,2001-01-01T00:00:00.000Z,2002-01-01T00:00:00.000Z,...'
     * (single) value: '2016-01-01T00:00:00.000Z/2018-01-01T00:00:00.000Z/P1Y'
     */
    getTimeValueFromDimensions(values: IEocOwsTimeDimension['values'], period?: IEocOwsTimeDimension['display']['period']): ILayerIntervalAndPeriod | Array<string | ILayerIntervalAndPeriod>;
    /**
     * time could be:
     *
     * - date
     * - start/end/duration //Geoserver specific
     * - start/end
     * - start/duration, and duration/end
     */
    private parseSingleTimeOrPeriod;
    private parseISO8601Period;
    getResourceDimensions(resource: IEocOwsResource): ILayerDimensions;
    getTimeDimensions(dimensions: IEocOwsResourceDimension[]): ILayerTimeDimension;
    getElevationDimension(dimensions: IEocOwsResourceDimension[]): ILayerElevationDimension;
    /** Offering --------------------------------------------------- */
    getLayertypeFromOfferingCode(offering: IOwsOffering): TLayertype;
    checkIfServiceOffering(offering: IOwsOffering): boolean;
    checkIfDataOffering(offering: IOwsOffering): boolean;
    /**
     * Helper function to extract legendURL from project specific ows Context
     * @param offering layer offering
     */
    getLegendUrl(offering: IOwsOffering): string;
    /**
     * Get all Layers from the IOwsContext.
     *
     * The order of the layers is reversed to get the context drawing order!
     */
    getLayers(owc: IOwsContext, targetProjection: string): Observable<(Layer | LayerGroup)[]>;
    /**
     * Creates Layers or LayerGroups from IOwsResource and IOwsContext
     * Add uniqueGroups array to track already created groups
     */
    private createLayerOrGroupFromResource;
    /**
     *
     * @param groupName string | `${TFiltertypes}/string`
     */
    createLayerGroup(groupName: string, includedResources: IOwsResource[], owc: IOwsContext, targetProjection: string): Observable<LayerGroup | StackedLayer>;
    createLayerFromDefaultOffering(resource: IOwsResource, owc: IOwsContext, targetProjection: string): Observable<Layer>;
    createLayerFromOffering(offering: IOwsOffering, resource: IOwsResource, context: IOwsContext, targetProjection: string): Observable<Layer>;
    createVectorLayerFromOffering(offering: IOwsOffering, resource: IOwsResource, context?: IOwsContext, targetProjection?: string): Observable<VectorLayer>;
    /**
     * TmsLayertype can be raster and vector
     */
    private isVectorLayerType;
    private getVectorLayerOptions;
    /**
     * https://opengeospatial.github.io/e-learning/wfs/text/operations.html#getfeature
     */
    private getWfsOptions;
    private checkWfsParams;
    createRasterLayerFromOffering(offering: IOwsOffering, resource: IOwsResource, context: IOwsContext, targetProjection: string): Observable<RasterLayer>;
    /**
     * TmsLayertype can be raster and vector
     */
    private isRasterLayerType;
    private createVectorTileLayerFromOffering;
    private createWfsLayerFromOffering;
    private createDataVectorLayerFromOffering;
    private createTmsRasterLayerFromOffering;
    private createWmtsLayerFromOffering;
    private createWmsLayerFromOffering;
    private createXyzLayerFromOffering;
    /**
     * https://docs.opengeospatial.org/is/13-082r2/13-082r2.html - OGC WMTS Simple Profile
     * http://schemas.opengis.net/wmts/1.0/wmtsGetTile_request.xsd
     * https://opengeospatial.github.io/e-learning/wmts/text/main.html#example-gettile-request
     */
    private getWmtsOptions;
    private parseOperationUrl;
    private getMatrixSetForWMTS;
    /**
     * TODO: add more vendor params ??
     * https://docs.geoserver.org/latest/en/user/services/wms/reference.html#getmap
     */
    private getWmsOptions;
    private getRasterLayerOptions;
    private getLayerOptions;
    /** Misc --------------------------------------------------- */
    /**
     * Based on the WMS Standard (https://portal.ogc.org/files/?artifact_id=14416),
     * to which the OWC Standard refers for the scale-denominator-field,
     * and the way that openlayers calculates zoom and resolution
     * (https://openlayers.org/en/latest/doc/tutorials/concepts.html)
     */
    private scaleDenominatorToZoom;
    /**
     * helper to pack query-parameters of a uri into a JSON
     * Makes all Params UpperCase
     *
     * @param uri any uri with query-parameters
     */
    private getJsonFromUri;
    /** ------------ DATA TO FILE ----------------------------------------- */
    /**
     * The order of created features is Overlays, Layers, Baselayers from top to bottom
     * set on the folder property
     */
    generateOwsContextFrom(id: string, layers: (Layer | LayerGroup)[], extent?: TGeoExtent, properties?: IEocOwsContext['properties']): IEocOwsContext;
    private generateAbstractFromLayerDescription;
    generateResourceFromLayer(layer: Layer, folderName?: string): IEocOwsResource;
    generateOfferingFromLayer(layer: Layer): IEocOwsOffering;
    getOfferingCodeFromLayer(layer: Layer): string;
    getContentsFromLayer(layer: VectorLayer): IOwsContent[];
    /**
     * For Service Offerings
     */
    getOperationsFromLayer(layer: Layer): IOwsOperation[];
    getXyzOperationsFromLayer(layer: RasterLayer): IOwsOperation[];
    private getTMSRasterOperationsFromLayer;
    getWfsOperationsFromLayer(layer: VectorLayer): IOwsOperation[];
    private getTMSVectorOperationsFromLayer;
    getWmsOperationsFromLayer(layer: RasterLayer): IOwsOperation[];
    getWmtsOperationsFromLayer(layer: RasterLayer): IOwsOperation[];
    private generateDimensionsFromLayer;
    static ɵfac: i0.ɵɵFactoryDeclaration<OwcJsonService, never>;
    static ɵprov: i0.ɵɵInjectableDeclaration<OwcJsonService>;
}
