{"version":3,"file":"dlr-eoc-services-ogc.mjs","sources":["../../../projects/services-ogc/src/lib/owc/types/owc-json.ts","../../../projects/services-ogc/src/lib/owc/types/eoc-owc-json.ts","../../../projects/services-ogc/src/lib/owc/types/owc-json.utils.ts","../../../projects/services-ogc/src/lib/wmts/wmtsclient.service.ts","../../../projects/services-ogc/src/lib/owc/owc-json.service.ts","../../../projects/services-ogc/src/lib/wps/wpsclient.ts","../../../projects/services-ogc/src/lib/wms/wmsclient.service.ts","../../../projects/services-ogc/src/public-api.ts","../../../projects/services-ogc/src/dlr-eoc-services-ogc.ts"],"sourcesContent":["/**\r\n * Type definitions for OGC OWS Context Geo Encoding Standard Version: 1.0\r\n * http://docs.opengeospatial.org/is/14-055r2/14-055r2.html\r\n * Definitions by: Mathias Boeck\r\n * TypeScript Version: 2.5.3\r\n *\r\n * depends on @types/geojson@^7946.0.2\r\n */\r\nimport * as GeoJSON from 'geojson';\r\n\r\n/**\r\n * The OWS Context describes Metadata, API, Time Range\r\n * http://www.owscontext.org/owc_user_guide/C0_userGuide.html#truethe-ows-context-document-structure\r\n * If no bounding box is specified, do not change the current view when the context document is loaded.\r\n */\r\nexport interface IOwsContext extends GeoJSON.FeatureCollection<GeoJSON.GeometryObject | null, GeoJSON.GeoJsonProperties> {\r\n  /**\r\n   * The id element defines a mandatory reference to the identification of the Context document.\r\n   * The content for the id element SHALL be an IRI, as defined by IETF [RFC3987]\r\n   */\r\n  id: string | number;\r\n  properties: {\r\n    links: {\r\n      profiles: IOwsLinks[],\r\n      via?: IOwsLinks[]\r\n    };\r\n    /** Language of Context document content */\r\n    lang: LangString;\r\n    /** Title for the Context document */\r\n    title: string;\r\n    /** Date of a creation or update of the Context document */\r\n    updated: DateString;\r\n    /** Description of the Context document purpose or content */\r\n    subtitle?: string;\r\n    /** This element is optional and indicates the authors array of the Context document */\r\n    authors?: IOwsAuthor[];\r\n    /** Identifier for the publisher of the Context document */\r\n    publisher?: string;\r\n    /** Tool/application used to create the Context document and its properties */\r\n    generator?: IOwsGenerator;\r\n    /**\r\n     * Properties of the display in use when the context document was created (for display based applications only).\r\n     * This class is optional and intended for creator applications that use a graphical user interface with a geographical display within a fixed pixel size and not scalable to different computational devices\r\n     */\r\n    display?: IOwsCreatorDisplay[];\r\n    /** Information about rights held in and over the Context document */\r\n    rights?: string;\r\n    /**\r\n     * This element is optional and expressed a date or range of dates relevant to the Context document.\r\n     * It can contain the element start, stop and instant. The values of these elements SHALL conform to the \"date-time\" production of ISO-8601[5]. An uppercase \"T\" character SHALL be used to separate date and time, and an uppercase \"Z\" character SHALL be present in the absence of a numeric time zone offset. To specify a range of dates the \"/\" character SHALL be used.\r\n     */\r\n    date?: DateString;\r\n    /** This array is an optional and expresses categories related to this Context document */\r\n    categories?: IOwsCategory[];\r\n    /** Extension Any other element */\r\n    [k: string]: any;\r\n  };\r\n  /** Ordered List of Resources available on the Context document\r\n   * The order of the member of the features MAY be used to identify the drawing order of the resources.\r\n   * In that case, the first item of the array represents the top most layer\r\n   */\r\n  features: IOwsResource[];\r\n  /** Extension Any other element */\r\n  [k: string]: any;\r\n}\r\n\r\n/**\r\n * Each layer (a.k.a. feature) in a context document is known as a ‘Resource’\r\n * A Resource reference a set of geospatial information to be treated as a logical element.\r\n * The resources are ordered such that the first item in the document is to be displayed at the front.\r\n * This defines the order in which layers are drawn.\r\n * A resource (which in GIS terms is a layer) can have a number of offerings, and each offering\r\n * is focussed on a particular representation of information.\r\n * These can be one of a number of OGC Web Services, specifically WMS, WMTS, WFS, WCS, WPS and CSW,\r\n * or one of a number of inline or referenced formats, specifically GML, KML, GeoTIFF, GMLJP2, GMLCOV,\r\n * or a custom offering type defined in a profile or by an organisation.\r\n * http://www.owscontext.org/owc_user_guide/C0_userGuide.html#truethe-ows-context-document-structure\r\n */\r\nexport interface IOwsResource extends GeoJSON.Feature {\r\n  /**\r\n   * Unambiguous reference to the identification of the Context resource (IRI)\r\n   * String type that SHALL contain a URI value\r\n   */\r\n  id: string | number;\r\n  properties: IOwsResourceProperties;\r\n  [k: string]: any;\r\n}\r\nexport interface IOwsResourceProperties {\r\n  /** Title given to the Context resource */\r\n  title: string;\r\n  /** Date of the last update of the Context resource */\r\n  updated: DateString;\r\n  /** The purpose is to provide a generic description of the content in a format understandable by generic readers */\r\n  abstract?: string;\r\n  /** This element is optional and indicates the authors array of the Context resource */\r\n  authors?: IOwsAuthor[];\r\n  /** Entity responsible for making the Context resource available */\r\n  publisher?: string;\r\n  /** Information about rights held in and over the Context resource */\r\n  rights?: string;\r\n  /** Date or range of dates relevant to the Context resource. The values of these elements SHALL conform to the \"date-time\" production of ISO-8601[5]*/\r\n  date?: DateString;\r\n  /** This element is optional and can contain a number of offerings defined by the class OWC:Offering */\r\n  offerings?: IOwsOffering[];\r\n  /** Flag value indicating to the client if the Context resource should be displayed by default.\r\n   * E.g. Layer is visible\r\n   */\r\n  active?: boolean;\r\n  /** This array is optional and expresses a category related to the Context resource */\r\n  categories?: IOwsCategory[];\r\n  /** Minimum scale for the display of the Context resource Double */\r\n  minscaledenominator?: number;\r\n  /** Maximum scale for the display of the Context resource Double */\r\n  maxscaledenominator?: number;\r\n  /** Definition of the folder in which the resource is placed\r\n   * The folder attribute is intended to support the concept present in many clients or organising layers into folders.\r\n   */\r\n  folder?: string;\r\n  links?: {\r\n    previews?: IOwsLinks[],\r\n    alternates?: IOwsLinks[],\r\n    data?: IOwsLinks[],\r\n    via?: IOwsLinks[]\r\n  };\r\n  [k: string]: any;\r\n}\r\n\r\n/**\r\n * In reality a resource can be realized in a number of different ways, and so an OWC document allows various options to be specified.\r\n * These are known as offerings.\r\n * The intention is that these are, as far as is possible by the format used,\r\n * equivalent and no priority is assigned to their order in the standard.\r\n * They are intended to be alternatives that the client can use to allow it to visualize or use the resource.\r\n *\r\n * So for example four offerings, a WMS, a WFS with portrayal as SLD, and an inline GML Offering again with portrayal as SLD.\r\n * Different clients could use these offerings as appropriate:\r\n * - a simple browser based client could use the WMS offering provided, using the standard portrayal\r\n * - a more sophisticated client, could use the WFS offering and the associated SLD Document.\r\n *\r\n * There are two types of offering, service offerings and data offerings.\r\n * A service offering has a service request (in the form of a capabilities request and a data request)\r\n * and optional content and styling elements.\r\n * A data offering has a content element and optional styling elements.\r\n *\r\n *\r\n * http://www.owscontext.org/owc_user_guide/C0_userGuide.html#truemultiple-offerings-and-priority\r\n */\r\nexport interface IOwsOffering {\r\n  /** Code identifying the type of offering - Extension Offerings with type - string */\r\n  code: WMS_Offering | WFS_Offering | WCS_Offering | WPS_Offering | CSW_Offering | WMTS_Offering |\r\n  GML_Offering | KML_Offering | GeoTIFF_Offering | GMLJP2_Offering | GMLCOV_Offering | string;\r\n  /** Web Service Offerings provide their operations - Array of operations used to invoke the service */\r\n  operations?: IOwsOperation[];\r\n  /** Content Offerings allow content to be embedded in an OWS Context document (inline or byRef) */\r\n  contents?: IOwsContent[];\r\n  /** Array of style sets - A style representation for a resource (inline or service derived) content */\r\n  styles?: IOwsStyleSet[];\r\n  [k: string]: any;\r\n}\r\n\r\nexport interface IOwsGenerator {\r\n  title?: string;\r\n  uri?: string;\r\n  version?: string;\r\n}\r\n\r\nexport interface IOwsAuthor {\r\n  /** Entity primarily responsible for making the Context document\r\n   * Properties that all types of authors have. It mimics the Atom author\r\n   */\r\n  name: string;\r\n  email?: string;\r\n  uri?: string;\r\n  [k: string]: any;\r\n}\r\n\r\nexport interface IOwsCategory {\r\n  /** Category related to this context document. It MAY have a related code-list that is identified by the scheme attribute */\r\n  term: string;\r\n  scheme?: string;\r\n  label?: string;\r\n}\r\n\r\n/** Properties that all types of links have. It mimics the Atom link */\r\nexport interface IOwsLinks {\r\n  href: string;\r\n  type?: string;\r\n  title?: string;\r\n  lang?: LangString;\r\n  length?: number;\r\n  [k: string]: any;\r\n}\r\n\r\nexport interface IOwsCreatorApplication {\r\n  title?: string;\r\n  uri?: string;\r\n  version?: string;\r\n}\r\n\r\nexport interface IOwsCreatorDisplay {\r\n  /** Width measured in pixels of the display showing the Area of Interest */\r\n  pixelWidth?: number;\r\n  /** Width measured in pixels of the display showing by the Area of Interest */\r\n  pixelHeight?: number;\r\n  /** The size of a pixel of the display in millimeters\r\n   * (combined with the previous ones allows for the real display size to be calculated)\r\n   */\r\n  mmPerPixel?: number;\r\n  [k: string]: any;\r\n}\r\n\r\n/**\r\n * Most service offerings have two operations, a ‘GetCapabilities’ operation and a data operation such as ‘GetMap’ for WMS\r\n */\r\nexport interface IOwsOperation {\r\n  /**\r\n   * The code identifies the type of operation.\r\n   * Valid types are defined within each specific extension within the OWS Context conceptual model [OGC 12-080].\r\n   */\r\n  code: string;\r\n  /** method defines the access method, for example GET or POST. */\r\n  method: string;\r\n  /** Service Request URL - The URI containing the definition of the request */\r\n  href: string;\r\n  /** MIME type of the expected results */\r\n  type?: string;\r\n  /** Optional request body content */\r\n  request?: IOwsContent;\r\n  /** Optional Result Payload of the operation */\r\n  result?: IOwsContent;\r\n  /** Extension of Operation */\r\n  [k: string]: any;\r\n}\r\n\r\nexport interface IOwsContent {\r\n  /** MIME type of the Content */\r\n  type: string;\r\n  /** URL of the Content */\r\n  href?: string;\r\n  /** Title of the Content */\r\n  title?: string;\r\n  /** In-line content for the Content element- String type, not empty that can contain any text encoded media type */\r\n  content?: string;\r\n  [k: string]: any;\r\n}\r\n\r\nexport interface IOwsStyleSet {\r\n  /** Unique name of the styleSet within a given offering */\r\n  name: string;\r\n  /** Human Readable title of the styleSet within a given offering */\r\n  title: string;\r\n  /** Description of the styleSet */\r\n  abstract?: string;\r\n  /** Whether this styleSet is the one to be defined by default */\r\n  default?: boolean;\r\n  /** URL of a legend image for the styleSet */\r\n  legendURL?: string;\r\n  /** The inline or a external reference to the styleSet definition */\r\n  content?: IOwsContent;\r\n  [k: string]: any;\r\n}\r\n\r\n/** ISO-8601 format e.g. YYYY-MM-DDThh:mm:ssZ or YYYY-MM-DDThh:mm:ssZ/YYYY-MM-DDThh:mm:ssZ */\r\nexport type DateString = string;\r\n\r\n\r\n/** RFC-3066 code e.g. en,de */\r\nexport type LangString = string;\r\n\r\nexport const wmsOffering = 'http://www.opengis.net/spec/owc-geojson/1.0/req/wms' as const;\r\nexport type WMS_Offering = typeof wmsOffering;\r\n\r\nexport const wfsOffering = 'http://www.opengis.net/spec/owc-geojson/1.0/req/wfs' as const;\r\nexport type WFS_Offering = typeof wfsOffering;\r\n\r\nexport const wcsOffering = 'http://www.opengis.net/spec/owc-geojson/1.0/req/wcs' as const;\r\nexport type WCS_Offering = typeof wcsOffering;\r\n\r\nexport const wpsOffering = 'http://www.opengis.net/spec/owc-geojson/1.0/req/wps' as const;\r\nexport type WPS_Offering = typeof wpsOffering;\r\n\r\nexport const cswOffering = 'http://www.opengis.net/spec/owc-geojson/1.0/req/csw' as const;\r\nexport type CSW_Offering = typeof cswOffering;\r\n\r\nexport const wmtsOffering = 'http://www.opengis.net/spec/owc-geojson/1.0/req/wmts' as const;\r\nexport type WMTS_Offering = typeof wmtsOffering;\r\n\r\nexport const gmlOffering = 'http://www.opengis.net/spec/owc-geojson/1.0/req/gml' as const;\r\nexport type GML_Offering = typeof gmlOffering;\r\n\r\nexport const kmlOffering = 'http://www.opengis.net/spec/owc-geojson/1.0/req/kml' as const;\r\nexport type KML_Offering = typeof kmlOffering;\r\n\r\nexport const GeoTIFFOffering = 'http://www.opengis.net/spec/owc-geojson/1.0/req/geotiff' as const;\r\nexport type GeoTIFF_Offering = typeof GeoTIFFOffering;\r\n\r\nexport const GMLJP2Offering = 'http://www.opengis.net/spec/owc-geojson/1.0/req/gmljp2' as const;\r\nexport type GMLJP2_Offering = typeof GMLJP2Offering;\r\n\r\nexport const GMLCOVOffering = 'http://www.opengis.net/spec/owc-geojson/1.0/req/gmlcov' as const;\r\nexport type GMLCOV_Offering = typeof GMLCOVOffering;\r\n","import {\r\n  IOwsContext, IOwsResource, IOwsOffering, WFS_Offering, WCS_Offering, WPS_Offering,\r\n  CSW_Offering, WMTS_Offering, GML_Offering, KML_Offering, GeoTIFF_Offering, GMLJP2_Offering,\r\n  GMLCOV_Offering, IOwsResourceProperties, WMS_Offering\r\n} from './owc-json';\r\n\r\n\r\nimport * as GeoJSON from 'geojson';\r\nexport interface IEocOwsContext extends IOwsContext {\r\n  features: IEocOwsResource[];\r\n  /** @deprecated we do not use this currently */\r\n  projections?: IEocOwsProjection[];\r\n}\r\n\r\nexport interface IEocOwsResource extends IOwsResource {\r\n  properties: IEocOwsResourceProperties;\r\n}\r\n\r\nexport interface IEocOwsResourceProperties extends IOwsResourceProperties {\r\n  /** The opacity of the displayed Layer */\r\n  opacity?: number;\r\n  attribution?: string; /** maybe this should be in IOwsResourceProperties.rights */\r\n  /** Subdomains for urls in layers - e.g. 'a-d' is placed in https://{s}.tiles.geoservice.dlr.de/... as {a-d} or multiple urls are generated\r\n   * e.g. https://a.tiles..., https://b.tiles...\r\n   */\r\n  shards?: string;\r\n  /** Layer Dimension like Time and Elevation - To define e.g. the available Time data points/ranges in the Layer and a hint how to display them */\r\n  dimensions?: IEocOwsResourceDimension[];\r\n  /** Alternative to IOwsResourceProperties.minscaledenominator; easier to calculate in browser-apps */\r\n  minZoom?: number;\r\n  /** Alternative to IOwsResourceProperties.maxscaledenominator; easier to calculate in browser-apps */\r\n  maxZoom?: number;\r\n  /**\r\n   * Folder is already defined on IOwsResourceProperties, this should only show how ukis is using it.\r\n   * - string - Single Folder inside the Layers Slot `Layers`\r\n   * - `${TFiltertypes}/string` - Single Folder inside one of the Layers Slots `TFiltertypes`\r\n   */\r\n  folder?: string;\r\n}\r\n\r\n\r\n\r\ntype isoInterval = `${string}/${string}`;\r\ntype intervalPeriod = `${isoInterval}/P${string}`;\r\n\r\nexport interface IEocOwsTimeDimension {\r\n  name: 'time';\r\n  /**\r\n   * For time:\r\n   *  - '1984-01-01T00:00:00.000Z,1990-01-01T00:00:00.000Z,1995-01-01T00:00:00.000Z,...'\r\n   *  - '2000-09-01T00:00:00.000Z/2017-08-31T00:00:00.000Z/P1D'\r\n   *  - '2000-09-01T00:00:00.000Z/2010-08-31T00:00:00.000Z/P1D,2010-09-01T00:00:00.000Z/2020-08-31T00:00:00.000Z/P1D,...'\r\n   *  - '1984-01-01T00:00:00.000Z/P1Y,1985-01-01T00:00:00.000Z/P1Y,1986-01-01T00:00:00.000Z,1987-01-01T00:00:00.000Z,...'\r\n   *  also see https://moment.github.io/luxon/api-docs/index.html#intervalfromiso\r\n   */\r\n  values: `${string | isoInterval | intervalPeriod},${string | isoInterval | intervalPeriod}` | isoInterval | intervalPeriod;\r\n  /**\r\n   * For time: 'ISO8601'\r\n   * ISO8601 has been chosen because this is how\r\n   * geoserver's GetCapabilities response exposes\r\n   * time information.\r\n   */\r\n  units: 'ISO8601' | string;\r\n  display?: {\r\n    /** format how to display the values e.g. YYYY-MM-DD */\r\n    format?: string;\r\n    /** in case the app should display data at a different period than what is available on the server */\r\n    period?: string;\r\n    /** The value which should be shown/used as default */\r\n    default?: string;\r\n  };\r\n}\r\n\r\n/** 12-111r1_Best_Practices_for_WMS_with_Time_or_Elevation_dependent_data.pdf - https://portal.ogc.org/files/?artifact_id=56394 */\r\nexport interface IEocOwsElevationDimension {\r\n  name: 'elevation';\r\n  /**\r\n   *\r\n   */\r\n  value: string;\r\n  /**\r\n   * string or range\r\n   * 100,200,300...\r\n   * 100/1000\r\n   */\r\n  units: string;\r\n  display?: {\r\n    unitSymbol?: string;\r\n    format?: string;\r\n    /** in case the app should display data at a different elevation step */\r\n    step?: string;\r\n    /** The value which should be shown/used as default */\r\n    default?: string;\r\n  };\r\n}\r\n\r\nexport type IEocOwsResourceDimension = IEocOwsTimeDimension | IEocOwsElevationDimension;\r\n\r\nexport interface IEocOwsOffering extends IOwsOffering {\r\n  code: WMS_Offering | WFS_Offering | WCS_Offering | WPS_Offering | CSW_Offering |\r\n  WMTS_Offering | GML_Offering | KML_Offering | GeoTIFF_Offering | GMLJP2_Offering |\r\n  GMLCOV_Offering | GeoJson_Offering | TMS_Offering | string;\r\n  /** @deprecated we do not use this currently */\r\n  iconUrl?: string;\r\n  /** @deprecated we do not use this currently */\r\n  title?: string;\r\n  /** only for WMTS_Offering */\r\n  matrixSets?: IEocOwsWmtsMatrixSet[];\r\n}\r\n\r\nexport interface IEocOwsWmtsMatrixSet {\r\n  /** EPSG-Code */\r\n  srs: string;\r\n  matrixSet: string;\r\n  matrixIds: string[];\r\n  origin: {\r\n    x: number,\r\n    y: number\r\n  };\r\n  resolutions: number[];\r\n  tilesize: {\r\n    height: number,\r\n    width: number\r\n  };\r\n}\r\n\r\n/**\r\n * @deprecated we do not use this currently\r\n */\r\nexport interface IEocOwsProjection {\r\n  bbox?: GeoJSON.BBox;\r\n  code: string;\r\n  default?: boolean;\r\n  unit?: string | number;\r\n}\r\n/**\r\n * http://www.owscontext.org/owc_user_guide/C0_userGuide.html#trueextension-offerings\r\n */\r\nexport const GeoJsonOffering = 'http://www.opengis.net/spec/owc-geojson/1.0/req/geojson' as const;\r\nexport type GeoJson_Offering = typeof GeoJsonOffering;\r\n\r\nexport const xyzOffering = 'http://www.opengis.net/spec/owc-geojson/1.0/req/xyz' as const;\r\nexport type Xyz_Offering = typeof xyzOffering;\r\n\r\nexport const tmsOffering = 'http://www.opengis.net/spec/owc-geojson/1.0/req/tms' as const;\r\nexport type TMS_Offering = typeof tmsOffering;\r\n\r\n\r\n/** list of context files */\r\nexport interface IEocOwsContextListItem {\r\n  id: IEocOwsContext['id'];\r\n  /** relative or absolute link/path to context file */\r\n  url: string;\r\n  /** default is true */\r\n  enabled?: boolean;\r\n}\r\n\r\nexport type EocOwsContextList = IEocOwsContextListItem[];\r\n","/** This file contains functions (Type Guards) to test for types in owc-json.ts */\r\n\r\nimport { Xyz_Offering, GeoJson_Offering, TMS_Offering, GeoJsonOffering, tmsOffering, xyzOffering } from './eoc-owc-json';\r\nimport { cswOffering, CSW_Offering, GeoTIFFOffering, GeoTIFF_Offering, GMLCOVOffering, GMLCOV_Offering, GMLJP2Offering, GMLJP2_Offering, gmlOffering, GML_Offering, IOwsAuthor, IOwsCategory, IOwsContent, IOwsContext, IOwsGenerator, IOwsCreatorDisplay, IOwsLinks, IOwsOffering, IOwsOperation, IOwsResource, IOwsResourceProperties, IOwsStyleSet, kmlOffering, KML_Offering, wcsOffering, WCS_Offering, wfsOffering, WFS_Offering, wmsOffering, WMS_Offering, wmtsOffering, WMTS_Offering } from './owc-json';\r\n\r\n\r\n/**\r\n * export types to create layers from Offerings\r\n */\r\nexport const GetMapOperationCode = 'GetMap' as const;\r\nexport type WMS_Code = typeof GetMapOperationCode;\r\n\r\nexport const GetFeatureOperationCode = 'GetFeature' as const;\r\nexport type WFS_Code = typeof GetFeatureOperationCode;\r\n\r\nexport const GetTileOperationCode = 'GetTile' as const;\r\nexport type WMTS_Code = typeof GetTileOperationCode;\r\n\r\nexport const RESTOperationCode = 'REST' as const;\r\nexport type TMS_Code = typeof RESTOperationCode;\r\nexport type XYZ_Code = typeof RESTOperationCode;\r\n\r\nexport const GetCapabilitiesOperationCode = 'GetCapabilities' as const;\r\nexport const DescribeFeatureTypeOperationCode = 'DescribeFeatureType' as const;\r\nexport const GetFeatureInfoOperationCode = 'GetFeatureInfo' as const;\r\n\r\n\r\nfunction trueForAll(list: any[], predicate: (o: any) => boolean): boolean {\r\n  for (const entry of list) {\r\n    if (!predicate(entry)) {\r\n      return false;\r\n    }\r\n  }\r\n  return true;\r\n}\r\n\r\nexport function isIOwsContext(object: IOwsContext): object is IOwsContext {\r\n  let ISCONTEXT_1_0;\r\n  if (object?.properties?.links) {\r\n    ISCONTEXT_1_0 = object.properties.links.profiles.find(item => item.href === 'http://www.opengis.net/spec/owc-geojson/1.0/req/core');\r\n  }\r\n\r\n  if (!ISCONTEXT_1_0) {\r\n    console.error('this is not a valid OWS Context v1.0!');\r\n    return false;\r\n  } else {\r\n    return true;\r\n  }\r\n}\r\n\r\nexport function isIOwsResource(object: any): object is IOwsResource {\r\n  return 'id' in object && 'type' in object\r\n    && 'properties' in object && isIOwsResourceProperties(object.properties);\r\n}\r\n\r\nexport function isIOwsResourceProperties(object: any): object is IOwsResourceProperties {\r\n  return 'title' in object\r\n    && 'updated' in object\r\n    && (object.authors ? trueForAll(object.authors, isIOwsAuthor) : true)\r\n    && (object.offerings ? trueForAll(object.offerings, isIOwsOffering) : true)\r\n    && (object.categories ? trueForAll(object.categories, isIOwsCategory) : true);\r\n}\r\n\r\nexport function isIOwsOffering(object: any): object is IOwsOffering {\r\n  return 'code' in object\r\n    && (object.operations ? trueForAll(object.operations, isIOwsOperation) : true)\r\n    && (object.contents ? trueForAll(object.contents, isIOwsContent) : true)\r\n    && (object.styles ? trueForAll(object.styles, isIOwsStyleSet) : true)\r\n}\r\n\r\nexport function isIOwsGenerator(object: any): object is IOwsGenerator {\r\n  return 'title' in object\r\n    || 'uri' in object\r\n    || 'version' in object;\r\n}\r\n\r\nexport function isIOwsAuthor(object: any): object is IOwsAuthor {\r\n  return 'name' in object\r\n    || 'email' in object\r\n    || 'uri' in object;\r\n}\r\n\r\nexport function isIOwsCategory(object: any): object is IOwsCategory {\r\n  return 'scheme' in object\r\n    || 'term' in object\r\n    || 'label' in object;\r\n}\r\n\r\nexport function isIOwsLinks(object: any): object is IOwsLinks {\r\n  return 'rel' in object;\r\n}\r\n\r\nexport function isIOwsCreatorDisplay(object: any): object is IOwsCreatorDisplay {\r\n  return 'pixelWidth' in object\r\n    || 'pixelHeight' in object\r\n    || 'mmPerPixel' in object;\r\n}\r\n\r\nexport function isIOwsOperation(object: any): object is IOwsOperation {\r\n  return 'code' in object\r\n    && 'method' in object\r\n    && (object.request ? isIOwsContent(object.request) : true)\r\n    && (object.result ? isIOwsContent(object.result) : true);\r\n}\r\n\r\nexport function isIOwsRasterOperation(object: any): object is IOwsOperation {\r\n  if (isIOwsOperation(object)) {\r\n    return [GetMapOperationCode, GetTileOperationCode, RESTOperationCode].includes(object.code as any);\r\n  } else {\r\n    return false;\r\n  }\r\n}\r\n\r\nexport function isIOwsVectorOperation(object: any): object is IOwsOperation {\r\n  if (isIOwsOperation(object)) {\r\n    return [GetFeatureOperationCode].includes(object.code as any);\r\n  } else {\r\n    return false;\r\n  }\r\n}\r\n\r\nexport function isIOwsContent(object: any): object is IOwsContent {\r\n  return 'type' in object;\r\n}\r\n\r\nexport function isIOwsStyleSet(object: any): object is IOwsStyleSet {\r\n  return 'name' in object\r\n    && 'title' in object;\r\n}\r\n\r\nexport function isWmsOffering(str: string): str is WMS_Offering {\r\n  return str === wmsOffering;\r\n}\r\nexport function isWfsOffering(str: string): str is WFS_Offering {\r\n  return str === wfsOffering;\r\n}\r\nexport function isWpsOffering(str: string): str is WCS_Offering {\r\n  return str === wcsOffering;\r\n}\r\nexport function isCswOffering(str: string): str is CSW_Offering {\r\n  return str === cswOffering;\r\n}\r\nexport function isWmtsOffering(str: string): str is WMTS_Offering {\r\n  return str === wmtsOffering;\r\n}\r\nexport function isGmlOffering(str: string): str is GML_Offering {\r\n  return str === gmlOffering;\r\n}\r\nexport function isKmlOffering(str: string): str is KML_Offering {\r\n  return str === kmlOffering;\r\n}\r\nexport function isGeoTIFFOffering(str: string): str is GeoTIFF_Offering {\r\n  return str === GeoTIFFOffering;\r\n}\r\nexport function isGMLJP2Offering(str: string): str is GMLJP2_Offering {\r\n  return str === GMLJP2Offering;\r\n}\r\nexport function isGMLCOVOffering(str: string): str is GMLCOV_Offering {\r\n  return str === GMLCOVOffering;\r\n}\r\nexport function isXyzOffering(str: string): str is Xyz_Offering {\r\n  return str === xyzOffering;\r\n}\r\nexport function isGeoJsonOffering(str: string): str is GeoJson_Offering {\r\n  return str === GeoJsonOffering;\r\n}\r\nexport function isTMSOffering(str: string): str is TMS_Offering {\r\n  return str === tmsOffering;\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { HttpClient, HttpHeaders } from '@angular/common/http';\r\nimport { Observable } from 'rxjs';\r\nimport { Jsonix } from '@michaellangbein/jsonix';\r\nimport { map } from 'rxjs/operators';\r\nimport * as XLink_1_0_Factory from 'w3c-schemas/lib/XLink_1_0';\r\nconst XLink_1_0 = XLink_1_0_Factory.XLink_1_0;\r\nimport * as OWS_1_1_0_Factory from 'ogc-schemas/lib/OWS_1_1_0';\r\nconst OWS_1_1_0 = OWS_1_1_0_Factory.OWS_1_1_0;\r\nimport * as SMIL_2_0_Factory from 'ogc-schemas/lib/SMIL_2_0';\r\nconst SMIL_2_0 = SMIL_2_0_Factory.SMIL_2_0;\r\nimport * as SMIL_2_0_Language_Factory from 'ogc-schemas/lib/SMIL_2_0_Language';\r\nconst SMIL_2_0_Language = SMIL_2_0_Language_Factory.SMIL_2_0_Language;\r\nimport * as GML_3_1_1_Factory from 'ogc-schemas/lib/GML_3_1_1';\r\nconst GML_3_1_1 = GML_3_1_1_Factory.GML_3_1_1;\r\nimport * as WMTS_1_0_Factory from 'ogc-schemas/lib/WMTS_1_0';\r\nconst WMTS_1_0 = WMTS_1_0_Factory.WMTS_1_0;\r\n\r\n\r\n\r\n@Injectable({\r\n  providedIn: 'root'\r\n})\r\nexport class WmtsClientService {\r\n\r\n  private xmlmarshaller;\r\n  private xmlunmarshaller;\r\n\r\n  constructor(private http: HttpClient) {\r\n    const context = new Jsonix.Context([SMIL_2_0, SMIL_2_0_Language, GML_3_1_1, XLink_1_0, OWS_1_1_0, WMTS_1_0]);\r\n    this.xmlunmarshaller = context.createUnmarshaller();\r\n    this.xmlmarshaller = context.createMarshaller();\r\n  }\r\n\r\n  public getCapabilities(url: string, version = '1.1.0'): Observable<object> {\r\n    // example: https://tiles.geoservice.dlr.de/service/wmts?SERVICE=WMTS&REQUEST=GetCapabilities&VERSION=1.1.0\r\n    const getCapabilitiesUrl = `${url}?SERVICE=WMTS&REQUEST=GetCapabilities&VERSION=${version}`;\r\n    const headers = new HttpHeaders({\r\n      'Content-Type': 'text/xml',\r\n      Accept: 'text/xml, application/xml'\r\n    });\r\n    return this.http.get(getCapabilitiesUrl, { headers, responseType: 'text' }).pipe(\r\n      map(response => {\r\n        return this.xmlunmarshaller.unmarshalString(response);\r\n      })\r\n    );\r\n  }\r\n\r\n}\r\n","\r\nimport { Injectable } from '@angular/core';\r\nimport {\r\n  IOwsContext, IOwsResource, IOwsOffering, IOwsOperation, IOwsContent, kmlOffering, wfsOffering, wmsOffering, wmtsOffering\r\n} from './types/owc-json';\r\nimport { DescribeFeatureTypeOperationCode, GetCapabilitiesOperationCode, GetFeatureInfoOperationCode, GetFeatureOperationCode, GetMapOperationCode, GetTileOperationCode, isGeoJsonOffering, isIOwsContext, isIOwsRasterOperation, isKmlOffering, isTMSOffering, isWfsOffering, isWmsOffering, isWmtsOffering, isXyzOffering, RESTOperationCode } from './types/owc-json.utils';\r\nimport {\r\n  IEocOwsContext, IEocOwsResource, IEocOwsOffering, IEocOwsWmtsMatrixSet,\r\n  IEocOwsResourceDimension,\r\n  IEocOwsTimeDimension,\r\n  IEocOwsElevationDimension,\r\n  GeoJsonOffering,\r\n  xyzOffering,\r\n  tmsOffering\r\n} from './types/eoc-owc-json';\r\nimport {\r\n  ILayerOptions, IRasterLayerOptions, VectorLayer, RasterLayer, IVectorLayerOptions,\r\n  Layer, TLayertype, WmsLayertype, WmtsLayertype, WfsLayertype, GeojsonLayertype, XyzLayertype,\r\n  TRasterLayertype, ILayerDimensions,\r\n  ILayerIntervalAndPeriod,\r\n  WmtsLayer,\r\n  IWmtsOptions,\r\n  WmsLayer,\r\n  IWmsParams,\r\n  IWmsOptions,\r\n  IListMatrixSet,\r\n  TFiltertypes,\r\n  LayerGroup,\r\n  ILayerTimeDimension,\r\n  ILayerElevationDimension,\r\n  Filtertypes,\r\n  TmsLayertype,\r\n  KmlLayertype,\r\n  IWmtsParams,\r\n  TVectorLayertype,\r\n  StackedLayer,\r\n  IStackedLayerOptions\r\n} from '@dlr-eoc/services-layers';\r\nimport { TGeoExtent } from '@dlr-eoc/services-map-state';\r\nimport { WmtsClientService } from '../wmts/wmtsclient.service';\r\nimport { of, Observable, forkJoin, concat } from 'rxjs';\r\nimport { filter, map } from 'rxjs/operators';\r\n\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { DateTime, Interval } from 'luxon';\r\nimport { get as getProjection } from 'ol/proj';\r\n\r\n\r\nexport function shardsExpand(v: string) {\r\n  if (!v) { return; }\r\n  const o: string[] = [];\r\n  const shardsSplit = v.split(',');\r\n  for (const i in shardsSplit) {\r\n    if (shardsSplit[i]) {\r\n      const j = shardsSplit[i].split('-');\r\n      if (j.length === 1) {\r\n        o.push(shardsSplit[i]);\r\n      } else if (j.length === 2) {\r\n        const start = j[0].charCodeAt(0);\r\n        const end = j[1].charCodeAt(0);\r\n        if (start <= end) {\r\n          for (let k = start; k <= end; k++) {\r\n            o.push(String.fromCharCode(k).toLowerCase());\r\n          }\r\n        } else {\r\n          for (let k = start; k >= end; k--) {\r\n            o.push(String.fromCharCode(k).toLowerCase());\r\n          }\r\n        }\r\n      }\r\n    }\r\n  }\r\n  return o;\r\n}\r\n\r\n/**\r\n * OWS Context Service\r\n * OGC OWS Context Geo Encoding Standard Version: 1.0\r\n * http://docs.opengeospatial.org/is/14-055r2/14-055r2.html\r\n * http://www.owscontext.org/owc_user_guide/C0_userGuide.html\r\n *\r\n * This service allows you to read and write OWC-data.\r\n * We have added some custom fields to the OWC standard.\r\n *   - accepts the OWC-standard-data-types as function inputs (so as to be as general as possible)\r\n *   - returns our extended OWC-data-types as function outputs (so as to be as information-rich as possible)\r\n *\r\n * As a policy, this services does *not* make any HTTP requests to GetCapabilities (or similar) to gather\r\n * additional information (with very few exceptions) - we want to save on network traffic.\r\n * However there are scripts that auto-generate OWC files from Capabilities, those, of course,\r\n * *do* scrape as much information online as possible; But they are not intended to be used in\r\n * a live-application. Run them batch-wise and server-side instead.\r\n */\r\n\r\n@Injectable({\r\n  providedIn: 'root'\r\n})\r\nexport class OwcJsonService {\r\n\r\n  constructor(\r\n    private wmtsClient: WmtsClientService,\r\n    private http: HttpClient) {\r\n    // http://www.owscontext.org/owc_user_guide/C0_userGuide.html#truegeojson-encoding-2\r\n  }\r\n\r\n\r\n  checkContext(context: IOwsContext) {\r\n    return isIOwsContext(context);\r\n  }\r\n\r\n  getContextTitle(context: IOwsContext) {\r\n    return context.properties.title;\r\n  }\r\n\r\n  getContextPublisher(context: IOwsContext) {\r\n    return (context.properties.publisher) ? context.properties.publisher : null;\r\n  }\r\n\r\n  getContextExtent(context: IOwsContext) {\r\n    return (context.bbox) ? context.bbox : null; // or [-180, -90, 180, 90];\r\n  }\r\n\r\n  getResources(context: IOwsContext): IOwsResource[] {\r\n    return context.features;\r\n  }\r\n\r\n  /**\r\n   * Get Resources whith Folder property but not including Layer-Filtertypes\r\n   */\r\n  getGroupResources(context: IOwsContext): IOwsResource[] {\r\n    const resources = context.features;\r\n    return resources.filter(r => {\r\n      const groupName = this.getLayerGroupFromFolder(r);\r\n      return groupName && !Object.keys(Filtertypes).includes(groupName);\r\n    });\r\n  }\r\n\r\n  /**\r\n   * Get Resources without Folder property or Folder is only Layer-Filtertypes\r\n   */\r\n  getSingleResources(context: IOwsContext): IOwsResource[] {\r\n    const resources = context.features;\r\n    return resources.filter(r => {\r\n      const groupName = this.getLayerGroupFromFolder(r);\r\n      return !groupName || Object.keys(Filtertypes).includes(groupName);\r\n    });\r\n  }\r\n\r\n  /** Resource --------------------------------------------------- */\r\n  getResourceTitle(resource: IOwsResource): string {\r\n    return resource.properties.title;\r\n  }\r\n\r\n  /**\r\n   * The Folder property of IOwsResource\r\n   * @returns string | `${TFiltertypes}/string`\r\n   */\r\n  getResourceFolder(resource: IOwsResource): string {\r\n    return resource.properties.folder;\r\n  }\r\n\r\n  /**\r\n   * returns name from Resource Folder if it is not only a Filtertype `TFiltertypes`\r\n   */\r\n  private getLayerGroupFromFolder(resource: IOwsResource) {\r\n    const folderName = this.getResourceFolder(resource);\r\n    if (folderName) {\r\n      const folderParts = folderName.split('/');\r\n      if (folderParts.length === 1) {\r\n        if (!Filtertypes[folderName]) {\r\n          return folderName\r\n        }\r\n      } else if (folderParts.length === 2) {\r\n        const filtertype = folderParts[0];\r\n        if (!Filtertypes[filtertype]) {\r\n          console.warn(`Folder (${folderName}) should be named like: ${Object.keys(Filtertypes).map(k => `${k}/<FolderName>`).join(' | ')}`);\r\n        }\r\n        return folderParts[1];\r\n      } else {\r\n        console.log(`only one Folder hierarchy is implemented`, folderParts);\r\n      }\r\n    }\r\n  }\r\n\r\n  /**\r\n   * FilterType in IOwsResource Folder property\r\n   */\r\n  getFilterType(resource: IOwsResource): TFiltertypes {\r\n    if (resource.properties.folder) {\r\n      const pathParts = resource.properties.folder.split('/');\r\n      const first = pathParts[0];\r\n      if (Filtertypes[first]) {\r\n        return first as TFiltertypes;\r\n      }\r\n    }\r\n  }\r\n\r\n  getResourceUpdated(resource: IOwsResource) {\r\n    return resource.properties.updated;\r\n  }\r\n\r\n  getResourceDate(resource: IOwsResource) {\r\n    return (resource.properties.date) ? resource.properties.date : null;\r\n  }\r\n\r\n  getResourceOfferings(resource: IOwsResource): IOwsOffering[] {\r\n    return (resource.properties.offerings) ? resource.properties.offerings : null;\r\n  }\r\n\r\n  /**\r\n   * retrieve layer status active / inactive based on IOwsResource\r\n   * @param resource: IOwsResource\r\n   */\r\n  isActive(resource: IOwsResource) {\r\n    let active = true;\r\n    if (resource.properties.active === false || resource.properties?.active) {\r\n      active = resource.properties.active;\r\n    }\r\n    return active;\r\n  }\r\n\r\n  getResourceDescription(resource: IOwsResource): string {\r\n    let description = '';\r\n    if (resource.properties.abstract) {\r\n      description = resource.properties.abstract;\r\n    }\r\n    return description;\r\n  }\r\n\r\n  /** OWS Extenson IEocOwsResource */\r\n  getResourceOpacity(resource: IEocOwsResource): number {\r\n    let opacity = 1;\r\n    if (resource.properties?.opacity) {\r\n      opacity = resource.properties.opacity;\r\n    }\r\n    return opacity;\r\n  }\r\n\r\n  /** OWS Extenson IEocOwsResource */\r\n  getResourceAttribution(resource: IEocOwsResource): string {\r\n    let attribution = '';\r\n    if (resource.properties?.attribution) {\r\n      attribution = resource.properties.attribution;\r\n    } else if (resource.properties.rights) {\r\n      attribution = resource.properties.rights;\r\n    }\r\n    return attribution;\r\n  }\r\n\r\n  /** OWS Extenson IEocOwsResource */\r\n  getResourceShards(resource: IEocOwsResource): string {\r\n    if (resource.properties?.shards) {\r\n      return resource.properties.shards;\r\n    }\r\n  }\r\n\r\n  /** OWS Extenson IEocOwsResource */\r\n  getResourceMinMaxZoom(resource: IEocOwsResource, targetProjection: string = 'EPSG:4326'): { minZoom: number; maxZoom: number; } {\r\n    const zooms = { minZoom: null, maxZoom: null };\r\n    if (resource.properties.minZoom) {\r\n      zooms.minZoom = resource.properties.minZoom;\r\n    } else if (resource.properties.maxscaledenominator) {  // *Max*ScaleDenom ~ *Min*Zoom\r\n      zooms.minZoom = this.scaleDenominatorToZoom(resource.properties.maxscaledenominator, targetProjection) || null;\r\n    }\r\n    if (resource.properties.maxZoom) {\r\n      zooms.maxZoom = resource.properties.maxZoom;\r\n    } else if (resource.properties.minscaledenominator) {  // *Min*ScaleDenom ~ *Max*Zoom\r\n      zooms.maxZoom = this.scaleDenominatorToZoom(resource.properties.minscaledenominator, targetProjection) || null;\r\n    }\r\n    return zooms;\r\n  }\r\n\r\n\r\n  /**\r\n   * e.g.\r\n   * (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,...'\r\n   * (array)   value: '1984-01-01T00:00:00.000Z/P1D,P1D/2000-01-01T00:00:00.000Z,...'\r\n   * (array)   value: '2000-01-01T00:00:00.000Z,2001-01-01T00:00:00.000Z,2002-01-01T00:00:00.000Z,...'\r\n   * (single) value: '2016-01-01T00:00:00.000Z/2018-01-01T00:00:00.000Z/P1Y'\r\n   */\r\n  getTimeValueFromDimensions(values: IEocOwsTimeDimension['values'], period?: IEocOwsTimeDimension['display']['period']): ILayerIntervalAndPeriod | Array<string | ILayerIntervalAndPeriod> {\r\n    if (values === null) {\r\n      return;\r\n    } else {\r\n      const isList = /,/g.test(values);\r\n      if (isList) {\r\n        // values: `${string},${string}`\r\n        const splitValues = values.split(',');\r\n        if (splitValues.length > 0) {\r\n          const parsed: Array<string | ILayerIntervalAndPeriod> = []; //\r\n          for (const value of splitValues) {\r\n            const parsedSingle = this.parseSingleTimeOrPeriod(value);\r\n            if (typeof parsedSingle === 'object' && parsedSingle.interval) {\r\n              if (!parsedSingle.periodicity && period) {\r\n                parsedSingle.periodicity = period;\r\n              } else if (!parsedSingle.periodicity && !period) {\r\n                console.warn(`Interval without a period`, values, period);\r\n              }\r\n            }\r\n            parsed.push(parsedSingle);\r\n          }\r\n          return parsed;\r\n        }\r\n      } else {\r\n        // `${string}/${string}` | `${string}/${string}/P${string}`\r\n        const parsedSingle = this.parseSingleTimeOrPeriod(values);\r\n        if (typeof parsedSingle === 'object' && parsedSingle.interval) {\r\n          if (!parsedSingle.periodicity && period) {\r\n            parsedSingle.periodicity = period;\r\n          } else if (!parsedSingle.periodicity && !period) {\r\n            console.warn(`Interval without a period`, values, period);\r\n          }\r\n          return parsedSingle;\r\n        } else if (typeof parsedSingle === 'string') {\r\n          return [parsedSingle];\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  /**\r\n   * time could be:\r\n   *\r\n   * - date\r\n   * - start/end/duration //Geoserver specific\r\n   * - start/end\r\n   * - start/duration, and duration/end\r\n   */\r\n  private parseSingleTimeOrPeriod(time: string): string | ILayerIntervalAndPeriod | null {\r\n    const dateTime = DateTime.fromISO(time);\r\n    if (dateTime.isValid) {\r\n      return dateTime.toUTC().toISO();\r\n    } else {\r\n      // is Interval ----------------------------\r\n      const interval = Interval.fromISO(time);\r\n      if (interval.isValid) {\r\n        const period = this.parseISO8601Period(time);\r\n        const intervalObject: ILayerIntervalAndPeriod = {\r\n          periodicity: period,\r\n          interval: `${interval.start.toUTC().toISO()}/${interval.end.toUTC().toISO()}`\r\n        };\r\n        return intervalObject;\r\n      } else {\r\n        console.warn(`no Interval or not valid`, time);\r\n        return null;\r\n      }\r\n    }\r\n  }\r\n\r\n  private parseISO8601Period(value: string): string {\r\n    const periodMatches = value.match(/P\\d*[YMWD](T\\d\\d[HMS])*/);\r\n    if (periodMatches) {\r\n      return periodMatches[0];\r\n    }\r\n  }\r\n\r\n  getResourceDimensions(resource: IEocOwsResource) {\r\n    if (!resource.properties.dimensions) {\r\n      return undefined;\r\n    }\r\n\r\n    const dims: ILayerDimensions = {};\r\n    for (const d of resource.properties.dimensions) {\r\n      const name = d.name;\r\n      if (name === 'time') {\r\n        dims.time = this.getTimeDimensions(resource.properties.dimensions);\r\n        /** if dimensions are defined but the values are null */\r\n        if (dims.time.values === null) {\r\n          console.log('check to get time dimensions value from OGC Service later!!', resource);\r\n        }\r\n      } else if (name === 'elevation') {\r\n        dims.elevation = this.getElevationDimension(resource.properties.dimensions);\r\n        /** if dimensions are defined but the values are null */\r\n        if (dims.elevation.values === null) {\r\n          console.log('check to get elevation dimensions value from OGC Service later!!', resource);\r\n        }\r\n      } else {\r\n        dims[name] = d;\r\n      }\r\n    }\r\n\r\n    return dims;\r\n  }\r\n\r\n  getTimeDimensions(dimensions: IEocOwsResourceDimension[]): ILayerTimeDimension {\r\n    let dim: ILayerTimeDimension = { values: null, units: null };\r\n    const value = dimensions.find(d => d.name === 'time') as IEocOwsTimeDimension;\r\n    if (!value) {\r\n      return;\r\n    }\r\n\r\n    const parsedValues = this.getTimeValueFromDimensions(value.values, value?.display?.period);\r\n    dim = {\r\n      values: null,\r\n      units: value.units,\r\n      display: {}\r\n    };\r\n\r\n    /** check if is array or single value */\r\n    if (Array.isArray(parsedValues)) {\r\n      dim.values = parsedValues as (string[] | ILayerIntervalAndPeriod[]);\r\n      /** don't set dim.display.period if it is an array because there could be different periods */\r\n      // dim.display.period = ...\r\n    } else if (parsedValues && typeof parsedValues !== 'string' && parsedValues.interval && parsedValues.periodicity) {\r\n      dim.values = parsedValues;\r\n      /** set dim.display.period from the parsed values */\r\n      if (parsedValues.periodicity) {\r\n        dim.display.period = parsedValues.periodicity;\r\n      }\r\n    }\r\n\r\n    if (value?.display?.format) {\r\n      dim.display.format = value.display.format;\r\n    }\r\n\r\n    return dim;\r\n  }\r\n\r\n  getElevationDimension(dimensions: IEocOwsResourceDimension[]): ILayerElevationDimension {\r\n    const dim: ILayerElevationDimension = { values: null, units: null };\r\n    const value = dimensions.find(d => d.name === 'elevation') as IEocOwsElevationDimension;\r\n    if (!value) {\r\n      return;\r\n    } else {\r\n      dim.values = value.value;\r\n      dim.units = value.units;\r\n\r\n      if (value.display) {\r\n        dim.display = value.display;\r\n      }\r\n\r\n      return dim;\r\n    }\r\n  }\r\n\r\n\r\n  /** Offering --------------------------------------------------- */\r\n  getLayertypeFromOfferingCode(offering: IOwsOffering): TLayertype {\r\n    if (isWmsOffering(offering.code)) {\r\n      return WmsLayertype;\r\n    } else if (isWmtsOffering(offering.code)) {\r\n      return WmtsLayertype;\r\n    } else if (isWfsOffering(offering.code)) {\r\n      return WfsLayertype;\r\n    } else if (isKmlOffering(offering.code)) {\r\n      return KmlLayertype;\r\n    } else if (isGeoJsonOffering(offering.code)) {\r\n      return GeojsonLayertype;\r\n    } else if (isXyzOffering(offering.code)) {\r\n      return XyzLayertype;\r\n    } else if (isTMSOffering(offering.code)) {\r\n      return TmsLayertype;\r\n    } else {\r\n      return offering.code; // an offering can also be any other string.\r\n    }\r\n  }\r\n\r\n  checkIfServiceOffering(offering: IOwsOffering): boolean {\r\n    return (!offering.contents && offering.operations) ? true : false;\r\n  }\r\n\r\n  checkIfDataOffering(offering: IOwsOffering): boolean {\r\n    return (offering.contents && !offering.operations) ? true : false;\r\n  }\r\n\r\n  /**\r\n   * Helper function to extract legendURL from project specific ows Context\r\n   * @param offering layer offering\r\n   */\r\n  getLegendUrl(offering: IOwsOffering) {\r\n    let legendUrl = '';\r\n\r\n    if (offering.styles) {\r\n      const defaultStyle = offering.styles.find(style => style.default);\r\n      if (defaultStyle) {\r\n        return defaultStyle.legendURL;\r\n      }\r\n    } else if (offering.legendUrl) {\r\n      legendUrl = offering.legendUrl;\r\n    }\r\n    return legendUrl;\r\n  }\r\n\r\n\r\n  /**\r\n   * Get all Layers from the IOwsContext.\r\n   *\r\n   * The order of the layers is reversed to get the context drawing order!\r\n   */\r\n  getLayers(owc: IOwsContext, targetProjection: string): Observable<(Layer | LayerGroup)[]> {\r\n    const layers$: Observable<Layer | LayerGroup>[] = [];\r\n    /** For the order of Layers see IOwsContext['features'] */\r\n\r\n    /**\r\n     * LayerGroups\r\n     *\r\n     * e.g. if groupName: Layers/test -> a group \"test\" in the slot Layers will be created with the layer in it\r\n     * e.g. if groupName: Overlays/test -> a group \"test\" in the slot Overlays will be created with the layer in it\r\n     * if groupName is only: Layers | Overlays | Baselayers use layerResources\r\n     */\r\n\r\n    const resources = this.getResources(owc);\r\n    const groups = [];\r\n    resources.forEach(r => {\r\n      const lg = this.createLayerOrGroupFromResource(r, owc, targetProjection, groups);\r\n      layers$.push(lg);\r\n    });\r\n\r\n    return forkJoin(layers$)\r\n      // making sure no undefined/null layers are returned\r\n      .pipe(map(layers => layers.filter(layer => layer)))\r\n      // reverse so layer order is like in the context\r\n      .pipe(map(layers => layers.reverse()));\r\n  }\r\n\r\n  /**\r\n   * Creates Layers or LayerGroups from IOwsResource and IOwsContext\r\n   * Add uniqueGroups array to track already created groups\r\n   */\r\n  private createLayerOrGroupFromResource(resource: IOwsResource, context: IOwsContext, targetProjection: string, uniqueGroups: string[]) {\r\n    const layergroupResources = this.getGroupResources(context);\r\n    const groupName = this.getLayerGroupFromFolder(resource);\r\n\r\n    /** Layers with folder property */\r\n    if (groupName) {\r\n      /** unique layergroupResources */\r\n      if (!uniqueGroups.includes(groupName)) {\r\n        uniqueGroups.push(groupName);\r\n        /** reverse so layer order is like in the context */\r\n        const includedResources = layergroupResources.filter(r => this.getLayerGroupFromFolder(r) === groupName).reverse();\r\n        const layerGroup$ = this.createLayerGroup(groupName, includedResources, context, targetProjection);\r\n        return layerGroup$;\r\n      } else {\r\n        return of(null);\r\n      }\r\n    } else {\r\n      /** Single Layers */\r\n      const layer$ = this.createLayerFromDefaultOffering(resource, context, targetProjection);\r\n      return layer$;\r\n    }\r\n  }\r\n\r\n\r\n\r\n  /**\r\n   *\r\n   * @param groupName string | `${TFiltertypes}/string`\r\n   */\r\n  createLayerGroup(groupName: string, includedResources: IOwsResource[], owc: IOwsContext, targetProjection: string): Observable<LayerGroup | StackedLayer> {\r\n    const layers$: Observable<Layer>[] = [];\r\n    let filterType = null;\r\n    for (const resource of includedResources) {\r\n      filterType = this.getFilterType(resource);\r\n      layers$.push(this.createLayerFromDefaultOffering(resource, owc, targetProjection));\r\n    }\r\n\r\n    const layerGroup$ = forkJoin(layers$)\r\n      // making sure no undefined layers are returned\r\n      .pipe(map((layers: Layer[]) => layers.filter(layer => layer)))\r\n      // putting layers in a LayerGroup\r\n      .pipe(map((layers: Layer[]) => {\r\n        if (layers.length) {\r\n          /** if filterType is Baselayers -> create a merged Layer */\r\n          if (filterType === Filtertypes.Baselayers) {\r\n            const descriptionLayers = layers.filter(l => l.description); // filter empty elements\r\n            const mergedDescription = descriptionLayers.map(i => i.description);\r\n            const legendImages = layers.map(i => i.legendImg).filter(d => d); // filter empty elements\r\n            const layerOptions: IStackedLayerOptions = {\r\n              id: `${groupName}_${layers.map(i => i.id).join(' ')}`.replace(/\\s/g, '_'),\r\n              name: groupName,\r\n              layers: layers,\r\n              filtertype: Filtertypes.Baselayers\r\n            };\r\n            if (mergedDescription.length) {\r\n              layerOptions.description = mergedDescription.map((d, index) => this.generateAbstractFromLayerDescription(d, descriptionLayers[index].id)).join(';\\r\\n');\r\n            }\r\n            if (legendImages) {\r\n              layerOptions.legendImg = legendImages[0];\r\n            }\r\n\r\n            const stackedLayer = new StackedLayer(layerOptions);\r\n            return stackedLayer;\r\n          } else {\r\n            const layerGroup = new LayerGroup({\r\n              id: `${groupName}_${layers.map(i => i.id).join(' ')}`.replace(/\\s/g, '_'),\r\n              name: groupName,\r\n              layers,\r\n              filtertype: layers[0].filtertype  // @TODO: can some layers have a different filter-type? -> All layers in a Group must be from the same filter type\r\n            });\r\n            return layerGroup;\r\n          }\r\n        }\r\n      }))\r\n      // making sure no undefined layers are returned\r\n      .pipe(filter(lg => lg instanceof LayerGroup || lg instanceof Layer));\r\n\r\n    return layerGroup$;\r\n  }\r\n\r\n  createLayerFromDefaultOffering(resource: IOwsResource, owc: IOwsContext, targetProjection: string): Observable<Layer> {\r\n    const offerings = resource.properties?.offerings;\r\n    if (offerings) {\r\n      // TODO: allow Multiple offerings ???\r\n      const offering = offerings.find(o => isWmsOffering(o.code))\r\n        || offerings.find(o => isWmtsOffering(o.code))\r\n        || offerings.find(o => isWfsOffering(o.code))\r\n        || offerings.find(o => isTMSOffering(o.code))\r\n        || offerings[0];\r\n      return this.createLayerFromOffering(offering, resource, owc, targetProjection);\r\n    } else {\r\n      return of(null);\r\n    }\r\n  }\r\n\r\n  createLayerFromOffering(offering: IOwsOffering, resource: IOwsResource, context: IOwsContext, targetProjection: string): Observable<Layer> {\r\n    const layerType = this.getLayertypeFromOfferingCode(offering);\r\n    if (this.isRasterLayerType(layerType) && this.isVectorLayerType(layerType)) {\r\n      // Some layers (tms) can both be raster or vector so create both and filter out of(null)\r\n      const raster = this.createRasterLayerFromOffering(offering, resource, context, targetProjection);\r\n      const vector = this.createVectorLayerFromOffering(offering, resource, context, targetProjection);\r\n      const layer = concat(raster, vector).pipe(filter(l => l instanceof Layer));\r\n      return layer;\r\n    } else if (this.isRasterLayerType(layerType)) {\r\n      return this.createRasterLayerFromOffering(offering, resource, context, targetProjection);\r\n    } else if (this.isVectorLayerType(layerType)) {\r\n      return this.createVectorLayerFromOffering(offering, resource, context, targetProjection);\r\n    } else {\r\n      console.warn(`This type of service (${layerType}) has not been implemented yet.`, offering);\r\n      return of(null);\r\n    }\r\n  }\r\n\r\n  createVectorLayerFromOffering(offering: IOwsOffering, resource: IOwsResource, context?: IOwsContext, targetProjection?: string): Observable<VectorLayer> {\r\n    const layerType = this.getLayertypeFromOfferingCode(offering);\r\n    let vectorLayer$: Observable<VectorLayer> = of(null);\r\n\r\n    switch (layerType) {\r\n      case WfsLayertype:\r\n        vectorLayer$ = this.createWfsLayerFromOffering(offering, resource, context);\r\n        break;\r\n      case TmsLayertype:\r\n        vectorLayer$ = this.createVectorTileLayerFromOffering(offering, resource, context, targetProjection);\r\n        break;\r\n      case GeojsonLayertype:\r\n        vectorLayer$ = this.createDataVectorLayerFromOffering(offering, resource, context);\r\n        break;\r\n      case KmlLayertype:\r\n        vectorLayer$ = this.createDataVectorLayerFromOffering(offering, resource, context);\r\n        break;\r\n      default:\r\n        console.warn(`This type of layer '${layerType}' / offering '${offering.code}' cannot be converted into a VectorLayer`, offering);\r\n        break;\r\n    }\r\n    return vectorLayer$;\r\n  }\r\n\r\n  /**\r\n   * TmsLayertype can be raster and vector\r\n   */\r\n  private isVectorLayerType(type: TLayertype) {\r\n    return [WfsLayertype, KmlLayertype, GeojsonLayertype, TmsLayertype].includes(type);\r\n  }\r\n\r\n  private getVectorLayerOptions(offering: IOwsOffering, resource: IOwsResource, context: IOwsContext, targetProjection?: string): IVectorLayerOptions {\r\n    const layerOptions: ILayerOptions = this.getLayerOptions(offering, resource, context);\r\n\r\n    if (this.isVectorLayerType(layerOptions.type)) {\r\n\r\n      const { minZoom, maxZoom } = this.getResourceMinMaxZoom(resource, targetProjection);\r\n      const subdomains = shardsExpand(this.getResourceShards(resource));\r\n      const vectorLayerOptions: IVectorLayerOptions = {\r\n        ...layerOptions,\r\n        type: layerOptions.type as TVectorLayertype,\r\n        subdomains,\r\n        maxZoom,\r\n        minZoom\r\n      };\r\n\r\n      return vectorLayerOptions;\r\n    } else {\r\n      console.error(`The layer ${layerOptions.id} is not a VectorLayer`, layerOptions);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * https://opengeospatial.github.io/e-learning/wfs/text/operations.html#getfeature\r\n   */\r\n  // offering, resource, context, targetProjection\r\n  private getWfsOptions(offering: IOwsOffering) {\r\n    const getFeatureOperation = offering.operations.find(o => o.code === GetFeatureOperationCode);\r\n    let layerUrl: string = null;\r\n    /** check for mandatory wfs params */\r\n    if (getFeatureOperation) {\r\n      const { url, searchParams } = this.checkWfsParams(offering);\r\n      if (url && searchParams) {\r\n        layerUrl = `${url}?${searchParams.toString()}`;\r\n      }\r\n    }\r\n    return layerUrl;\r\n  }\r\n\r\n  private checkWfsParams(offering: IOwsOffering) {\r\n    const { url, searchParams } = this.parseOperationUrl(offering, GetFeatureOperationCode);\r\n    const params = {\r\n      typeNames: searchParams.get('TYPENAME') || searchParams.get('TYPENAMES'),\r\n      version: searchParams.get('VERSION'),\r\n      service: searchParams.get('SERVICE'),\r\n      request: searchParams.get('REQUEST')\r\n    };\r\n    if (!params.typeNames && !params.version || !params.service || !params.request) {\r\n      console.warn(`URL does not contain the minimum required arguments for a WFS typeName: ${params.typeNames}, version: ${params.version}, service: ${params.service}, request: ${params.request}`, `${url}?${searchParams.toString()}`);\r\n      return { url: null, searchParams: null };\r\n    } else {\r\n      return { url, searchParams };\r\n    }\r\n  }\r\n\r\n  createRasterLayerFromOffering(\r\n    offering: IOwsOffering, resource: IOwsResource, context: IOwsContext, targetProjection: string): Observable<RasterLayer> {\r\n    const layerType = this.getLayertypeFromOfferingCode(offering);\r\n\r\n    let rasterLayer$: Observable<RasterLayer> = of(null);\r\n    switch (layerType) {\r\n      case WmsLayertype:\r\n        rasterLayer$ = this.createWmsLayerFromOffering(offering, resource, context, targetProjection);\r\n        break;\r\n      case WmtsLayertype:\r\n        rasterLayer$ = this.createWmtsLayerFromOffering(offering, resource, context, targetProjection);\r\n        break;\r\n      case XyzLayertype:\r\n        rasterLayer$ = this.createXyzLayerFromOffering(offering, resource, context, targetProjection);\r\n        break;\r\n      case TmsLayertype:\r\n        rasterLayer$ = this.createTmsRasterLayerFromOffering(offering, resource, context, targetProjection);\r\n        break;\r\n      default:\r\n        console.warn(`This type of offering '${offering.code}' cannot be converted into a RasterLayer.`, offering);\r\n        break;\r\n    }\r\n    return rasterLayer$;\r\n  }\r\n\r\n  /**\r\n   * TmsLayertype can be raster and vector\r\n   */\r\n  private isRasterLayerType(type: TLayertype) {\r\n    return [WmsLayertype, WmtsLayertype, XyzLayertype, TmsLayertype].includes(type);\r\n  }\r\n\r\n  private createVectorTileLayerFromOffering(offering: IEocOwsOffering, resource: IEocOwsResource, context: IEocOwsContext, targetProjection: string): Observable<VectorLayer> {\r\n    if (isTMSOffering(offering.code)) {\r\n      const vectorTileOperation = offering.operations.find(o => o.type === 'application/vnd.mapbox-vector-tile');\r\n      if (vectorTileOperation) {\r\n        const layerOptions = this.getVectorLayerOptions(offering, resource, context);\r\n\r\n        const tmsServerUrl = offering.operations.find(o => o.code === RESTOperationCode).href;\r\n        layerOptions.url = tmsServerUrl;\r\n\r\n        if (offering.styles && offering.styles[0]?.content.type === 'OpenMapStyle') {\r\n          const content = offering.styles[0].content;\r\n\r\n          // we need the sourceKey to apply t5he style later\r\n          if (content?.styleSource) {\r\n            if (!layerOptions.options) {\r\n              layerOptions.options = {\r\n                styleSource: content.styleSource,\r\n                style: null\r\n              };\r\n            } else if (!layerOptions.options.style) {\r\n              layerOptions.options.style = {};\r\n              layerOptions.options.styleSource = content.styleSource;\r\n            }\r\n\r\n            let styleObj$: Observable<any>;\r\n            if (content?.content) {\r\n              if (typeof content.content === 'string') {\r\n                styleObj$ = of(JSON.parse(content.content));\r\n              } else {\r\n                styleObj$ = of(content.content);\r\n              }\r\n            } else if (content?.href) {\r\n              const url = content.href;\r\n              styleObj$ = this.http.get(url);\r\n            } else {\r\n              console.warn(`Couldn't find style for Tms-Offering`, offering);\r\n            }\r\n\r\n            if (styleObj$) {\r\n              return styleObj$.pipe(map((obj) => {\r\n                layerOptions.options.style = obj;\r\n                const newLayer = new VectorLayer(layerOptions);\r\n                return newLayer;\r\n              }));\r\n            } else {\r\n              const newLayer = new VectorLayer(layerOptions);\r\n              return of(newLayer);\r\n            }\r\n          }\r\n        } else {\r\n          const newLayer = new VectorLayer(layerOptions);\r\n          return of(newLayer);\r\n        }\r\n      } else {\r\n        return of(null);\r\n      }\r\n\r\n    } else {\r\n      return of(null);\r\n    }\r\n  }\r\n\r\n  private createWfsLayerFromOffering(offering: IOwsOffering, resource: IOwsResource, context: IOwsContext): Observable<VectorLayer> {\r\n    // Case 1: service-offering\r\n    let layerUrl;\r\n    if (offering.operations) {\r\n      /** currently, Ukis only supports wfs as service vector offering */\r\n      layerUrl = this.getWfsOptions(offering);\r\n\r\n      const layerOptions = this.getVectorLayerOptions(offering, resource, context);\r\n      layerOptions.url = layerUrl;\r\n\r\n      const layer = new VectorLayer(layerOptions);\r\n\r\n      if (resource.bbox) {\r\n        layer.bbox = resource.bbox;\r\n      } else if (context && context.bbox) {\r\n        layer.bbox = context.bbox;\r\n      }\r\n      return of(layer);\r\n    }\r\n\r\n    if (layerUrl === null) {\r\n      return of(null);\r\n    }\r\n  }\r\n\r\n  private createDataVectorLayerFromOffering(offering: IOwsOffering, resource: IOwsResource, context: IOwsContext): Observable<VectorLayer> {\r\n    // Case 2: data-offering\r\n    if (offering.contents) {\r\n      let data: any;\r\n      let url: string;\r\n      // currently, Ukis only supports geojson and kml as data-offering\r\n      offering.contents.forEach(content => {\r\n        if (content?.content) {\r\n          if (content.type === 'application/geo+json') {\r\n            if (typeof content.content === 'string') {\r\n              data = JSON.parse(content.content);\r\n            } else {\r\n              data = content.content;\r\n            }\r\n          } else if (content.type === 'application/vnd.google-earth.kml+xml') {\r\n            data = content.content;\r\n          }\r\n        } else if (content?.href) {\r\n          url = content.href;\r\n        }\r\n      });\r\n\r\n      const layerOptions = this.getVectorLayerOptions(offering, resource, context);\r\n\r\n      if (data) {\r\n        layerOptions.data = data;\r\n      } else if (url) {\r\n        layerOptions.url = url;\r\n      }\r\n\r\n      if (resource.bbox) {\r\n        layerOptions.bbox = resource.bbox;\r\n      } else if (context && context.bbox) {\r\n        layerOptions.bbox = context.bbox;\r\n      }\r\n\r\n      const layer = new VectorLayer(layerOptions);\r\n      return of(layer);\r\n    } else {\r\n      return of(null);\r\n    }\r\n  }\r\n\r\n  private createTmsRasterLayerFromOffering(offering: IOwsOffering, resource: IOwsResource, context: IOwsContext, targetProjection: string): Observable<RasterLayer> {\r\n    if (isTMSOffering(offering.code)) {\r\n      // url: 'https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png',\r\n      // subdomains: ['a', 'b', 'c'], OR shards?: string; a-d\r\n      const rasterOperation = offering.operations.find(o => o.type === 'image/png' || o.type === 'image/jpeg');\r\n      if (rasterOperation) {\r\n        const rasterOptions: IRasterLayerOptions = this.getRasterLayerOptions(offering, resource, context, targetProjection);\r\n        // TODO: use new function on map-ol to create tms not xyz type\r\n        rasterOptions.type = 'xyz';\r\n        const layer = new RasterLayer(rasterOptions);\r\n        return of(layer);\r\n      } else {\r\n        // no Raster TMS, maybe VectorTile\r\n        return of(null);\r\n      }\r\n    } else {\r\n      return of(null);\r\n    }\r\n  }\r\n\r\n  private createWmtsLayerFromOffering(\r\n    offering: IOwsOffering, resource: IOwsResource, context: IOwsContext, targetProjection: string) {\r\n    if (isWmtsOffering(offering.code)) {\r\n      return this.getWmtsOptions(offering, resource, context, targetProjection).pipe(map((options: IWmtsOptions) => {\r\n        const layer = new WmtsLayer(options);\r\n        return layer;\r\n      }));\r\n    } else {\r\n      return of(null);\r\n    }\r\n  }\r\n\r\n  private createWmsLayerFromOffering(offering: IOwsOffering, resource: IOwsResource, context: IOwsContext, targetProjection: string): Observable<WmsLayer> {\r\n    if (isWmsOffering(offering.code)) {\r\n      const options: IWmsOptions = this.getWmsOptions(offering, resource, context, targetProjection);\r\n      const layer = new WmsLayer(options);\r\n      return of(layer);\r\n    } else {\r\n      return of(null);\r\n    }\r\n  }\r\n\r\n  private createXyzLayerFromOffering(offering: IOwsOffering, resource: IOwsResource, context: IOwsContext, targetProjection: string): Observable<RasterLayer> {\r\n    if (isXyzOffering(offering.code)) {\r\n      // url: 'https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png',\r\n      // subdomains: ['a', 'b', 'c'], OR shards?: string; a-d\r\n      const rasterOptions: IRasterLayerOptions = this.getRasterLayerOptions(offering, resource, context, targetProjection);\r\n      rasterOptions.type = 'xyz';\r\n      const layer = new RasterLayer(rasterOptions);\r\n      return of(layer);\r\n    } else {\r\n      return of(null);\r\n    }\r\n\r\n  }\r\n\r\n  /**\r\n   * https://docs.opengeospatial.org/is/13-082r2/13-082r2.html - OGC WMTS Simple Profile\r\n   * http://schemas.opengis.net/wmts/1.0/wmtsGetTile_request.xsd\r\n   * https://opengeospatial.github.io/e-learning/wmts/text/main.html#example-gettile-request\r\n   */\r\n  private getWmtsOptions(\r\n    offering: IOwsOffering, resource: IOwsResource, context: IOwsContext, targetProjection: string): Observable<IWmtsOptions> {\r\n    const rasterOptions: IRasterLayerOptions = this.getRasterLayerOptions(offering, resource, context, targetProjection);\r\n\r\n    const { searchParams } = this.parseOperationUrl(offering, GetTileOperationCode);\r\n\r\n    const params: IWmtsParams = {\r\n      layer: searchParams.get('LAYER'),\r\n      style: 'default', // (mandatory) -> 07-057r7_Web_Map_Tile_Service_Standard.pdf\r\n      projection: targetProjection // TODO: alow this also from URL???\r\n    };\r\n\r\n\r\n    const defaultStyle = offering?.styles?.find(s => s.default);\r\n    if (defaultStyle && defaultStyle.name) {\r\n      params.style = defaultStyle.name;\r\n    } else if (searchParams.has('STYLE')) {\r\n      params.style = searchParams.get('STYLE');\r\n    }\r\n\r\n    if (searchParams.has('FORMAT')) {\r\n      params.format = searchParams.get('FORMAT');\r\n    }\r\n    if (searchParams.has('VERSION')) {\r\n      params.version = searchParams.get('VERSION');\r\n    }\r\n\r\n    return this.getMatrixSetForWMTS(offering, targetProjection)\r\n      .pipe(map((matrixSet: IEocOwsWmtsMatrixSet | null) => {\r\n        const wmtsOptions: IWmtsOptions = {\r\n          ...rasterOptions,\r\n          type: 'wmts',\r\n          params\r\n        };\r\n\r\n        if (matrixSet) {\r\n          const matrixSetOptions: IListMatrixSet = {\r\n            matrixSet: matrixSet.matrixSet,\r\n            matrixIds: matrixSet.matrixIds,\r\n            resolutions: matrixSet.resolutions\r\n          };\r\n          wmtsOptions.params.matrixSetOptions = matrixSetOptions;\r\n        }\r\n\r\n        return wmtsOptions;\r\n      }));\r\n  }\r\n\r\n  private parseOperationUrl(offering: IOwsOffering, opCode: string) {\r\n    const up: { url: string, searchParams: URLSearchParams } = {\r\n      url: null,\r\n      searchParams: null\r\n    };\r\n    if (offering.operations) {\r\n      const operation = offering.operations.find(op => op.code === opCode);\r\n      if (operation) {\r\n        const { url, searchParams } = this.getJsonFromUri(operation.href);\r\n        up.url = url;\r\n        up.searchParams = searchParams;\r\n      } else {\r\n        console.error(`There is no ${opCode} -operation in the offering ${offering.code}.`, offering);\r\n      }\r\n    } else {\r\n      console.error(`The offering ${offering.code} has no operations.`, offering);\r\n    }\r\n    return up;\r\n  }\r\n\r\n  /* TODO: check correctness of this function and add it to utils-ogc\r\n\r\n    getDefaultMatrixSet(projection: { extent: [number, number, number, number], srs: string }, matrixSet: string, resolutions?: Array<string | number>, matrixIds?: Array<string | number>,\r\n    resolutionLevels: number = 42, tileSize: number = 256, matrixIdPrefix: string = '') {\r\n    const resolutionsFromExtent = (extent, optMaxZoom: number, ts: number) => {\r\n      const maxZoom = optMaxZoom;\r\n      const height = extent[3] - extent[1]; // getHeight\r\n      const width = extent[2] - extent[0]; // getWidth\r\n      const maxResolution = Math.max(width / ts, height / ts);\r\n      const length = maxZoom + 1;\r\n      const res = new Array(length);\r\n      for (let z = 0; z < length; ++z) {\r\n        res[z] = maxResolution / Math.pow(2, z);\r\n      }\r\n      return res;\r\n    };\r\n\r\n    const matrixIdsFromResolutions = (resLev: number, maPre?: string) => {\r\n      return Array.from(Array(resLev).keys()).map(l => {\r\n        if (maPre) {\r\n          return `${maPre}:${l} `;\r\n        } else {\r\n          return l;\r\n        }\r\n      });\r\n    };\r\n\r\n    const defaultResolutions = resolutionsFromExtent(projection.extent, resolutionLevels, tileSize);\r\n    const defaultMatrixIds = matrixIdsFromResolutions(defaultResolutions.length, matrixIdPrefix);\r\n\r\n    const defaultSet: IEocOwsWmtsMatrixSet = {\r\n      srs: projection.srs,\r\n      matrixSet,\r\n      origin: {\r\n        x: projection.extent[0],\r\n        y: projection.extent[3]\r\n      },\r\n      resolutions: resolutions || defaultResolutions,\r\n      tilesize: {\r\n        height: tileSize,\r\n        width: tileSize\r\n      },\r\n      matrixIds: matrixIds || defaultMatrixIds as any\r\n    };\r\n    defaultSet.matrixIds = defaultSet.matrixIds.map(i => i.toString());\r\n    return defaultSet;\r\n  } */\r\n\r\n  private getMatrixSetForWMTS(offering: IEocOwsOffering, targetProjection: string): Observable<IEocOwsWmtsMatrixSet> {\r\n    // Observable<IEocOwsWmtsMatrixSet | null> vs. Observable<IEocOwsWmtsMatrixSet> https://github.com/ReactiveX/rxjs/issues/3388\r\n    if (offering?.matrixSets) {\r\n      const matrixSet = offering.matrixSets.find(m => m.srs === targetProjection);\r\n      return of(matrixSet);\r\n    } else if (offering.matrixSets === null) {\r\n      /**\r\n       * If offering.matrixSets === null use a default set for EPSG:3857 and 256 tiles\r\n       * Create this in the mapping library when the WMTS is created.\r\n       */\r\n      return of(null)\r\n    } else {\r\n      const url = this.parseOperationUrl(offering, 'GetCapabilities').url;\r\n      return this.wmtsClient.getCapabilities(url).pipe(\r\n        map((capabilities: any) => {\r\n          const matrixSets = capabilities.value.contents.tileMatrixSet;\r\n          let matrixSet = matrixSets.find(ms => ms.identifier.value === targetProjection);\r\n\r\n          if (!matrixSet && targetProjection === 'EPSG:3857') {\r\n            const altTargetProjection = 'EPSG:900913';\r\n            matrixSet = matrixSets.find(ms => ms.identifier.value === altTargetProjection);\r\n          }\r\n\r\n          const owsMatrixSet: IEocOwsWmtsMatrixSet = {\r\n            srs: targetProjection,\r\n            matrixSet: matrixSet['identifier']['value'],\r\n            matrixIds: matrixSet['tileMatrix'].map(tm => tm['identifier']['value']),\r\n            resolutions: matrixSet['tileMatrix'].map(tm => tm['scaleDenominator']),\r\n            origin: {\r\n              x: matrixSet['tileMatrix'][0]['topLeftCorner'][1],\r\n              y: matrixSet['tileMatrix'][0]['topLeftCorner'][0]\r\n            },\r\n            tilesize: matrixSet['tileMatrix'][0]['tileHeight']\r\n          };\r\n          return owsMatrixSet;\r\n        })\r\n      );\r\n    }\r\n  }\r\n\r\n  /**\r\n   * TODO: add more vendor params ??\r\n   * https://docs.geoserver.org/latest/en/user/services/wms/reference.html#getmap\r\n   */\r\n  private getWmsOptions(\r\n    offering: IOwsOffering, resource: IOwsResource, context: IOwsContext, targetProjection: string): IWmsOptions {\r\n\r\n    const rasterOptions: IRasterLayerOptions = this.getRasterLayerOptions(offering, resource, context, targetProjection);\r\n    if (rasterOptions?.type === WmsLayertype) {\r\n\r\n      const { searchParams } = this.parseOperationUrl(offering, GetMapOperationCode);\r\n\r\n      const params: IWmsParams = {\r\n        LAYERS: searchParams.get('LAYERS'),\r\n        TRANSPARENT: true\r\n      };\r\n      const defaultStyle = offering?.styles?.find(s => s.default);\r\n      if (defaultStyle && defaultStyle.name) {\r\n        params.STYLES = defaultStyle.name;\r\n      } else if (searchParams.has('STYLES')) {\r\n        params.STYLES = searchParams.get('STYLES');\r\n      }\r\n      if (searchParams.has('FORMAT')) {\r\n        params.FORMAT = searchParams.get('FORMAT');\r\n      }\r\n      if (searchParams.has('TIME')) {\r\n        params.TIME = searchParams.get('TIME');\r\n      }\r\n      if (searchParams.has('VERSION')) {\r\n        params.VERSION = searchParams.get('VERSION');\r\n      }\r\n      if (searchParams.has('TILED')) {\r\n        params.TILED = searchParams.get('TILED');\r\n      }\r\n      /** https://docs.geoserver.org/latest/en/user/tutorials/cql/cql_tutorial.html#cql-tutorial */\r\n      if (searchParams.has('CQL_FILTER')) {\r\n        params.CQL_FILTER = searchParams.get('CQL_FILTER');\r\n      }\r\n      /** https://docs.geoserver.org/latest/en/user/styling/sld/reference/filters.html */\r\n      if (searchParams.has('FILTER')) {\r\n        params.FILTER = searchParams.get('FILTER');\r\n      }\r\n\r\n      const wmsOptions: IWmsOptions = {\r\n        ...rasterOptions,\r\n        type: 'wms',\r\n        params\r\n      };\r\n      return wmsOptions;\r\n    } else {\r\n      console.warn(`resource ${resource.id} cannot be converted into a WMS - Layer`, offering);\r\n    }\r\n  }\r\n\r\n  private getRasterLayerOptions(offering: IOwsOffering, resource: IEocOwsResource, context: IOwsContext, targetProjection: string): IRasterLayerOptions {\r\n    const layerOptions: ILayerOptions = this.getLayerOptions(offering, resource, context);\r\n    if (this.isRasterLayerType(layerOptions.type)) {\r\n      let time;\r\n      let elevation;\r\n      const dimensions = resource.properties?.dimensions;\r\n      if (dimensions) {\r\n        time = this.getTimeDimensions(dimensions);\r\n        elevation = this.getElevationDimension(dimensions);\r\n      }\r\n\r\n      const { minZoom, maxZoom } = this.getResourceMinMaxZoom(resource, targetProjection);\r\n      const subdomains = shardsExpand(this.getResourceShards(resource));\r\n      const getRasterOperation = offering.operations.find(o => isIOwsRasterOperation(o));\r\n      if (getRasterOperation) {\r\n        const rasterLayerOptions: IRasterLayerOptions = {\r\n          ...layerOptions,\r\n          type: layerOptions.type as TRasterLayertype,\r\n          url: this.getJsonFromUri(getRasterOperation.href).url\r\n        };\r\n\r\n        if (minZoom) {\r\n          rasterLayerOptions.minZoom = minZoom;\r\n        }\r\n        if (maxZoom) {\r\n          rasterLayerOptions.maxZoom = maxZoom;\r\n        }\r\n\r\n        if (subdomains?.length) {\r\n          rasterLayerOptions.subdomains = subdomains;\r\n        }\r\n\r\n        if (time) {\r\n          if (!rasterLayerOptions.dimensions) {\r\n            rasterLayerOptions.dimensions = {};\r\n          }\r\n          rasterLayerOptions.dimensions.time = time;\r\n        }\r\n        if (elevation) {\r\n          if (!rasterLayerOptions.dimensions) {\r\n            rasterLayerOptions.dimensions = {};\r\n          }\r\n          rasterLayerOptions.dimensions.elevation = elevation;\r\n        }\r\n        return rasterLayerOptions;\r\n      } else {\r\n        console.warn(`There is no Raster operation for the offering`, offering);\r\n      }\r\n    } else {\r\n      console.error(`The layer ${layerOptions.id} is not a RasterLayer`, layerOptions);\r\n    }\r\n  }\r\n\r\n  private getLayerOptions(offering: IOwsOffering, resource: IOwsResource, context: IOwsContext): ILayerOptions {\r\n    const layerOptions: ILayerOptions = {\r\n      id: resource.id as string,\r\n      type: this.getLayertypeFromOfferingCode(offering),\r\n      name: this.getResourceTitle(resource),\r\n      removable: true,\r\n      continuousWorld: false,\r\n      opacity: this.getResourceOpacity(resource),\r\n      displayName: this.getResourceTitle(resource),\r\n      visible: this.isActive(resource),\r\n      attribution: this.getResourceAttribution(resource),\r\n      dimensions: this.getResourceDimensions(resource),\r\n      legendImg: this.getLegendUrl(offering),\r\n      styles: offering.styles,\r\n      description: this.getResourceDescription(resource)\r\n    };\r\n\r\n    if (resource.bbox) {\r\n      layerOptions.bbox = resource.bbox;\r\n    } else if (context && context.bbox) {\r\n      layerOptions.bbox = context.bbox;\r\n    }\r\n\r\n    /** skip bbox for baselayers */\r\n    if (resource.properties?.folder === Filtertypes.Baselayers && !resource.bbox) {\r\n      layerOptions.bbox = null;\r\n    }\r\n\r\n    const filterType = this.getFilterType(resource);\r\n    if (filterType) {\r\n      layerOptions.filtertype = filterType;\r\n    }\r\n\r\n    return layerOptions;\r\n  }\r\n\r\n  /** Misc --------------------------------------------------- */\r\n\r\n  /**\r\n   * Based on the WMS Standard (https://portal.ogc.org/files/?artifact_id=14416),\r\n   * to which the OWC Standard refers for the scale-denominator-field,\r\n   * and the way that openlayers calculates zoom and resolution\r\n   * (https://openlayers.org/en/latest/doc/tutorials/concepts.html)\r\n   */\r\n  private scaleDenominatorToZoom(scaleDenominator: number, targetProjectionCode: string): number {\r\n    const projection = getProjection(targetProjectionCode);\r\n    if (!projection) {\r\n      console.error(`The projection '${targetProjectionCode}' is unknown.You'll have to manually register it with 'proj4.defs'.`);\r\n      return null;\r\n    }\r\n    if (!projection.getWorldExtent()) {\r\n      console.error(`No world extent given for projection '${targetProjectionCode}'.`);\r\n      return null;\r\n    }\r\n\r\n    const unitsPerMeter = 1.0 / projection.getMetersPerUnit();\r\n    const projectionExtent = projection.getWorldExtent();\r\n    const projectionWidth = projectionExtent[2] - projectionExtent[0];\r\n    const projectionHeight = projectionExtent[3] - projectionExtent[1];\r\n    const projectionMaxExtent = Math.max(projectionWidth, projectionHeight);\r\n    const pixelsOn1mScreen = 2571.42;  // using the default assumption of 0.28mm/pixel\r\n    const resolution = scaleDenominator * unitsPerMeter / pixelsOn1mScreen;\r\n    const zoom = Math.log2(projectionMaxExtent / (resolution * 256));\r\n\r\n    return zoom;\r\n  }\r\n\r\n  /**\r\n   * helper to pack query-parameters of a uri into a JSON\r\n   * Makes all Params UpperCase\r\n   *\r\n   * @param uri any uri with query-parameters\r\n   */\r\n  private getJsonFromUri(uri: string) {\r\n    let url = null;\r\n    if (uri.indexOf('http://') === 0 || uri.indexOf('https://') === 0) {\r\n      url = new URL(uri);\r\n    } else {\r\n      url = new URL(uri, window.location.origin);\r\n    }\r\n    const searchParams = new URLSearchParams();\r\n    // Make all Params UpperCase\r\n    url.searchParams.forEach((v, k) => {\r\n      searchParams.set(k.toUpperCase(), v);\r\n    });\r\n\r\n    const queryIndex = (uri.indexOf('?') !== -1) ? uri.indexOf('?') : uri.length;\r\n    return {\r\n      url: uri.substring(0, queryIndex),\r\n      searchParams: searchParams\r\n    };\r\n  }\r\n\r\n  /** ------------ DATA TO FILE ----------------------------------------- */\r\n\r\n\r\n  /**\r\n   * The order of created features is Overlays, Layers, Baselayers from top to bottom\r\n   * set on the folder property\r\n   */\r\n  generateOwsContextFrom(id: string, layers: (Layer | LayerGroup)[], extent?: TGeoExtent, properties?: IEocOwsContext['properties']): IEocOwsContext {\r\n\r\n    /** sort layerGroups so the order is Overlays, Layers, Baselayers */\r\n    const Overlays: (Layer | LayerGroup)[] = [];\r\n    const Layers: (Layer | LayerGroup)[] = [];\r\n    const Baselayers: (Layer | LayerGroup)[] = [];\r\n\r\n    layers.forEach(l => {\r\n      if (l.filtertype === Filtertypes.Overlays) {\r\n        Overlays.push(l);\r\n      } else if (l.filtertype === Filtertypes.Layers) {\r\n        Layers.push(l);\r\n      } else if (l.filtertype === Filtertypes.Baselayers) {\r\n        Baselayers.push(l);\r\n      }\r\n    });\r\n    /** Spread so layers Object is not mutated and reverse so order is like in OWC */\r\n    const sortedLayers = [...Overlays.reverse(), ...Layers.reverse(), ...Baselayers.reverse()];\r\n\r\n    let defaultProperties = {\r\n      links: {\r\n        profiles: [{\r\n          href: 'http://www.opengis.net/spec/owc-geojson/1.0/req/core'\r\n        }],\r\n      },\r\n      lang: 'en',\r\n      title: 'This is an automatically created context',\r\n      updated: new Date().toISOString(),\r\n      subtitle: `Context created from ${sortedLayers.map(l => `Layer:${l.id}`).join(', ')}`\r\n    }\r\n\r\n    if (properties) {\r\n      defaultProperties = Object.assign(defaultProperties, properties);\r\n    }\r\n\r\n    const owc: IEocOwsContext = {\r\n      id,\r\n      type: 'FeatureCollection',\r\n      properties: defaultProperties,\r\n      features: []\r\n    };\r\n\r\n    if (extent) {\r\n      owc.bbox = extent;\r\n    }\r\n\r\n    sortedLayers.forEach(lg => {\r\n\r\n      if (lg instanceof LayerGroup) {\r\n        const folderName = lg.name;\r\n        /** Spread so layers Object is not mutated in the reverse */\r\n        const groupLayers = [...lg.layers];\r\n        /** reverse so order is like in OWC */\r\n        groupLayers.reverse().forEach(l => {\r\n          const res = this.generateResourceFromLayer(l, folderName);\r\n          owc.features.push(res);\r\n        });\r\n      } else {\r\n        const res = this.generateResourceFromLayer(lg);\r\n        owc.features.push(res);\r\n      }\r\n    });\r\n\r\n    return owc;\r\n  }\r\n\r\n  private generateAbstractFromLayerDescription(description: Layer['description'], layerID?: Layer['id']) {\r\n    if(!description){\r\n      return '';\r\n    }\r\n    if (typeof description === 'string') {\r\n      return description\r\n    } else {\r\n      if (description.inputs?.description) {\r\n        return JSON.stringify(description);\r\n      } else {\r\n        return `Could not generate description from layer: ${layerID} - dynamic component`\r\n      }\r\n    }\r\n  }\r\n\r\n  generateResourceFromLayer(layer: Layer, folderName?: string): IEocOwsResource {\r\n    const resource: IEocOwsResource = {\r\n      id: layer.id,\r\n      properties: {\r\n        title: layer.displayName || layer.name,\r\n        opacity: layer.opacity,\r\n        active: layer.visible,\r\n        abstract: this.generateAbstractFromLayerDescription(layer.description, layer.id),\r\n        rights: layer.attribution,\r\n        minZoom: layer.minZoom,\r\n        maxZoom: layer.maxZoom,\r\n        updated: new Date().toISOString(),\r\n        offerings: [this.generateOfferingFromLayer(layer)]\r\n      },\r\n      bbox: layer.bbox,\r\n      type: 'Feature',\r\n      geometry: null\r\n    };\r\n\r\n    // TODO convert to scaledenominator??\r\n    /* if (layer.minResolution) {\r\n      resource.properties.minscaledenominator = layer.minResolution;\r\n    }\r\n    if (layer.maxResolution) {\r\n      resource.properties.maxscaledenominator = layer.maxResolution;\r\n    } */\r\n\r\n    if (folderName) {\r\n      resource.properties.folder = `${layer.filtertype}/${folderName}`;\r\n    } else {\r\n      resource.properties.folder = `${layer.filtertype}`;\r\n    }\r\n\r\n    if (layer instanceof RasterLayer && layer.subdomains) {\r\n      resource.properties.shards = `${layer.subdomains[0]}-${layer.subdomains[layer.subdomains.length - 1]}`;\r\n    } else if (layer instanceof VectorLayer && layer.subdomains) {\r\n      resource.properties.shards = `${layer.subdomains[0]}-${layer.subdomains[layer.subdomains.length - 1]}`;\r\n    }\r\n\r\n    if (layer.dimensions) {\r\n      resource.properties.dimensions = this.generateDimensionsFromLayer(layer);\r\n    }\r\n    return resource;\r\n  }\r\n\r\n  generateOfferingFromLayer(layer: Layer): IEocOwsOffering {\r\n    const offering: IEocOwsOffering = {\r\n      code: this.getOfferingCodeFromLayer(layer),\r\n      title: layer.name,\r\n      styles: []\r\n    };\r\n\r\n    if (layer.type === GeojsonLayertype || layer.type === KmlLayertype) {\r\n      offering.contents = this.getContentsFromLayer(layer as VectorLayer);\r\n    } else {\r\n      offering.operations = this.getOperationsFromLayer(layer);\r\n    }\r\n\r\n    /**\r\n     * Get Styles\r\n     * - If only Legend images\r\n     * - If params.style or params.STYLES\r\n     * - If options?.style\r\n     */\r\n    if (layer instanceof RasterLayer) {\r\n      if (layer?.params?.STYLES || layer?.params?.style || layer.legendImg) {\r\n        offering.styles.push({\r\n          name: layer?.params?.STYLES || layer?.params?.style || null,\r\n          title: `${layer.name}-StyleTitle`,\r\n          default: (layer?.params?.STYLES || layer?.params?.style || layer.legendImg) ? true : false,\r\n          legendURL: (typeof layer.legendImg === 'string') ? layer.legendImg : null,\r\n        });\r\n      }\r\n    } else if (layer instanceof VectorLayer && layer.type === 'tms') {\r\n      if (layer?.options?.style && layer?.options?.styleSource) {\r\n        offering.styles.push({\r\n          name: null,\r\n          title: `${layer.name}-StyleTitle`,\r\n          default: true,\r\n          legendURL: (typeof layer.legendImg === 'string') ? layer.legendImg : null,\r\n          content: {\r\n            type: 'OpenMapStyle',\r\n            styleSource: layer.options.styleSource,\r\n            content: layer.options.style\r\n          }\r\n        });\r\n      }\r\n    } else { // e.g. Layer.type=xyz only for getLegendUrl\r\n      offering.styles.push({\r\n        name: null,\r\n        title: `${layer.name}-StyleTitle`,\r\n        default: true,\r\n        legendURL: (typeof layer.legendImg === 'string') ? layer.legendImg : null,\r\n      });\r\n    }\r\n\r\n    if (!offering.styles.length) {\r\n      delete offering.styles;\r\n    }\r\n    return offering;\r\n  }\r\n\r\n  getOfferingCodeFromLayer(layer: Layer): string {\r\n    switch (layer.type) {\r\n      case WmsLayertype:\r\n        return wmsOffering;\r\n      case WmtsLayertype:\r\n        return wmtsOffering;\r\n      case GeojsonLayertype:\r\n        return GeoJsonOffering;\r\n      case XyzLayertype:\r\n        return xyzOffering;\r\n      case WfsLayertype:\r\n        return wfsOffering;\r\n      case KmlLayertype:\r\n        return kmlOffering;\r\n      case TmsLayertype:\r\n        return tmsOffering;\r\n      default:\r\n        console.warn(`This type of layer (${layer.type}) has not been implemented yet.`, layer);\r\n        return null;\r\n    }\r\n  }\r\n\r\n  getContentsFromLayer(layer: VectorLayer): IOwsContent[] {\r\n    const contents = [];\r\n    switch (layer.type) {\r\n      case GeojsonLayertype:\r\n        if (layer.data) {\r\n          contents.push({\r\n            type: 'application/geo+json',\r\n            content: JSON.stringify(layer.data)\r\n          });\r\n        } else if (layer.url) {\r\n          contents.push({\r\n            type: 'application/geo+json',\r\n            href: layer.url\r\n          });\r\n        }\r\n        break;\r\n      case KmlLayertype:\r\n        if (layer.data) {\r\n          contents.push({\r\n            type: 'application/vnd.google-earth.kml+xml',\r\n            content: layer.data\r\n          });\r\n        } else if (layer.url) {\r\n          contents.push({\r\n            type: 'application/vnd.google-earth.kml+xml',\r\n            href: layer.url\r\n          });\r\n        }\r\n        break;\r\n      default:\r\n        console.warn(`Cannot get contents for this type of VectorLayer: (${layer.type})`, layer);\r\n    }\r\n    return contents;\r\n  }\r\n\r\n  /**\r\n   * For Service Offerings\r\n   */\r\n  getOperationsFromLayer(layer: Layer): IOwsOperation[] {\r\n    if (layer instanceof RasterLayer) {\r\n      switch (layer.type) {\r\n        case WmsLayertype:\r\n          return this.getWmsOperationsFromLayer(layer);\r\n        case WmtsLayertype:\r\n          return this.getWmtsOperationsFromLayer(layer);\r\n        case XyzLayertype:\r\n          return this.getXyzOperationsFromLayer(layer);\r\n        case TmsLayertype:\r\n          return this.getTMSRasterOperationsFromLayer(layer);\r\n        default:\r\n          console.warn(`Cannot get operations for this type of layer: (${layer.type})`, layer);\r\n          return [];\r\n      }\r\n    } else if (layer instanceof VectorLayer) {\r\n      switch (layer.type) {\r\n        case WfsLayertype:\r\n          return this.getWfsOperationsFromLayer(layer);\r\n        case TmsLayertype:\r\n          return this.getTMSVectorOperationsFromLayer(layer);\r\n        default:\r\n          console.warn(`Cannot get operations for this type of layer: (${layer.type})`, layer);\r\n          return [];\r\n      }\r\n    }\r\n\r\n  }\r\n\r\n\r\n  getXyzOperationsFromLayer(layer: RasterLayer): IOwsOperation[] {\r\n    const restCall: IOwsOperation = {\r\n      code: RESTOperationCode,\r\n      method: 'GET',\r\n      type: 'image/png', // or other image types e.g. 'image/jpeg'\r\n      href: `${layer.url}`\r\n    };\r\n\r\n    const operations: IOwsOperation[] = [\r\n      restCall\r\n    ];\r\n\r\n    return operations;\r\n  }\r\n\r\n  private getTMSRasterOperationsFromLayer(layer: RasterLayer): IOwsOperation[] {\r\n    const restCall: IOwsOperation = {\r\n      code: RESTOperationCode,\r\n      method: 'GET',\r\n      type: 'image/png', // or other image types e.g. 'image/jpeg'\r\n      href: `${layer.url}`\r\n    };\r\n\r\n    const operations: IOwsOperation[] = [\r\n      restCall\r\n    ];\r\n\r\n    return operations;\r\n  }\r\n\r\n  getWfsOperationsFromLayer(layer: VectorLayer): IOwsOperation[] {\r\n    const version = layer.options?.version ? layer.options.version : '1.1.0';\r\n    const { url, searchParams } = this.getJsonFromUri(layer.url);\r\n    const typeName = searchParams.get('TYPENAME') || searchParams.get('TYPENAMES');\r\n    if (!typeName) {\r\n      console.warn(`URL does not contain the minimum required arguments for a WFS typeName: ${typeName}`, url);\r\n      return [];\r\n    }\r\n\r\n    const GetFeature: IOwsOperation = {\r\n      code: GetFeatureOperationCode,\r\n      method: 'GET',\r\n      type: 'application/json',\r\n      href: `${url}?${searchParams.toString()}`\r\n    };\r\n\r\n    const GetCapabilities: IOwsOperation = {\r\n      code: GetCapabilitiesOperationCode,\r\n      method: 'GET',\r\n      type: 'application/xml',\r\n      href: `${url}?service=WFS&request=GetCapabilities`\r\n    };\r\n\r\n    const DescribeFeatureType: IOwsOperation = {\r\n      code: DescribeFeatureTypeOperationCode,\r\n      method: 'GET',\r\n      type: 'application/json',\r\n      href: `${url}?service=WFS&request=DescribeFeatureType&version=${version}&typeNames=${typeName}&outputFormat=application/json`\r\n    };\r\n\r\n    // let GetPropertyValue: IOwsOperation = null;\r\n    // let GetFeatureWithLock: IOwsOperation = null;\r\n    // let LockFeature: IOwsOperation = null;\r\n    // let Transaction: IOwsOperation = null;\r\n    // let CreateStoredQuery: IOwsOperation = null;\r\n    // let DropStoredQuery: IOwsOperation = null;\r\n    // let ListStoredQueries: IOwsOperation = null;\r\n    // let DescribeStoredQueries: IOwsOperation = null;\r\n\r\n    const operations = [\r\n      GetFeature,\r\n      GetCapabilities,\r\n      DescribeFeatureType,\r\n      // GetPropertyValue,\r\n      // GetFeatureWithLock,\r\n      // LockFeature,\r\n      // Transaction,\r\n      // CreateStoredQuery,\r\n      // DropStoredQuery,\r\n      // ListStoredQueries,\r\n      // DescribeStoredQueries\r\n    ];\r\n\r\n    return operations;\r\n  }\r\n\r\n  private getTMSVectorOperationsFromLayer(layer: VectorLayer): IOwsOperation[] {\r\n    const restCall: IOwsOperation = {\r\n      code: RESTOperationCode,\r\n      method: 'GET',\r\n      type: 'application/vnd.mapbox-vector-tile', // or other image types e.g. 'image/jpeg'\r\n      href: `${layer.url}`\r\n    };\r\n\r\n    // TODO: Get Styles - Offering\r\n    /* content: {\r\n      type: 'OpenMapStyle',\r\n      styleSource: string,\r\n      content: content\r\n    } */\r\n\r\n    const operations: IOwsOperation[] = [\r\n      restCall\r\n    ];\r\n\r\n    return operations;\r\n  }\r\n\r\n  getWmsOperationsFromLayer(layer: RasterLayer): IOwsOperation[] {\r\n    let url = layer.url;\r\n\r\n    if (url.endsWith('?')) {\r\n      url = url.substr(0, url.length - 1);\r\n    }\r\n\r\n    const searchParams = new URLSearchParams();\r\n    Object.keys(layer.params).forEach(k => {\r\n      const v = layer.params[k];\r\n      if (v) {\r\n        searchParams.set(k, v);\r\n      }\r\n    });\r\n\r\n    searchParams.set('REQUEST', 'GetMap');\r\n    searchParams.set('SERVICE', 'WMS');\r\n\r\n    // searchParams.set('LAYERS', layer.id);\r\n    if (!searchParams.get('FORMAT')) {\r\n      searchParams.set('FORMAT', 'image/png'); // 'image/jpeg'\r\n    }\r\n\r\n    const getMap: IOwsOperation = {\r\n      code: GetMapOperationCode,\r\n      method: 'GET',\r\n      type: searchParams.get('FORMAT'),\r\n      href: `${url}?${searchParams.toString()}`\r\n    };\r\n\r\n    const getCapabilities: IOwsOperation = {\r\n      code: GetCapabilitiesOperationCode,\r\n      method: 'GET',\r\n      type: 'application/xml',\r\n      href: `${url}?service=WMS&version=${searchParams.get('VERSION')}&request=GetCapabilities`\r\n    };\r\n\r\n    const getFeatureInfo: IOwsOperation = {\r\n      code: GetFeatureInfoOperationCode,\r\n      method: 'GET',\r\n      type: 'application/json',\r\n      href: `${url}?service=WMS&version=${searchParams.get('VERSION')}&request=GetFeatureInfo&TRANSPARENT=TRUE&LAYERS=${searchParams.get('LAYERS')}&INFO_FORMAT=application/json`\r\n    };\r\n\r\n    const operations: IOwsOperation[] = [\r\n      getMap,\r\n      getCapabilities,\r\n      getFeatureInfo\r\n    ];\r\n\r\n    return operations;\r\n  }\r\n\r\n  getWmtsOperationsFromLayer(layer: RasterLayer): IOwsOperation[] {\r\n    let url = layer.url;\r\n    if (url.endsWith('?')) {\r\n      url = url.substr(0, url.length - 1);\r\n    }\r\n\r\n    const searchParams = new URLSearchParams();\r\n    Object.keys(layer.params).forEach(k => {\r\n      const v = layer.params[k];\r\n      if (v) {\r\n        searchParams.set(k.toUpperCase(), v);\r\n      }\r\n    });\r\n    searchParams.set('REQUEST', 'GetTile');\r\n    searchParams.set('SERVICE', 'WMTS');\r\n\r\n    if (!searchParams.get('FORMAT')) {\r\n      searchParams.set('FORMAT', 'image/png'); // 'image/jpeg'\r\n    }\r\n\r\n    if (searchParams.has('MATRIXSETOPTIONS')) {\r\n      searchParams.delete('MATRIXSETOPTIONS');\r\n    }\r\n\r\n    const getTile: IOwsOperation = {\r\n      code: GetTileOperationCode,\r\n      href: `${url}?${searchParams.toString()}`,\r\n      method: 'GET',\r\n      type: searchParams.get('FORMAT'),\r\n    };\r\n\r\n    const getCapabilities: IOwsOperation = {\r\n      code: GetCapabilitiesOperationCode,\r\n      href: `${url}?SERVICE=WMTS&REQUEST=GetCapabilities&VERSION=${searchParams.get('VERSION')}`,\r\n      method: 'GET',\r\n      type: 'application/xml'\r\n    };\r\n\r\n    // Note: we deliberately use the WMS protocol here instead of WMTS.\r\n    // Reason: WMTS delivers RGB-values, wheras WMS delivers the actual value that was used to create a tile.\r\n    const getFeatureInfo: IOwsOperation = {\r\n      code: GetFeatureInfoOperationCode,\r\n      href: `${url}?SERVICE=WMS&REQUEST=GetFeatureInfo&VERSION=${searchParams.get('VERSION')}`,\r\n      method: 'GET',\r\n      type: 'text/html'\r\n    };\r\n\r\n    const operations: IOwsOperation[] = [\r\n      getTile,\r\n      getCapabilities,\r\n      getFeatureInfo\r\n    ];\r\n\r\n    return operations;\r\n  }\r\n\r\n  private generateDimensionsFromLayer(layer: Layer) {\r\n    const dimensions: IEocOwsResourceDimension[] = [];\r\n\r\n    if (layer?.dimensions?.time) {\r\n      const td: IEocOwsTimeDimension = {\r\n        name: 'time',\r\n        values: null,\r\n        units: 'ISO8601'\r\n      };\r\n      if (layer.dimensions.time.display) {\r\n        td.display = layer.dimensions.time.display;\r\n      }\r\n\r\n      if (Array.isArray(layer.dimensions.time.values)) {\r\n        if (typeof layer.dimensions.time.values[0] === 'string') {\r\n          td.values = layer.dimensions.time.values.join(',') as IEocOwsTimeDimension['values'];\r\n        } else {\r\n          td.values = (layer.dimensions.time.values as ILayerIntervalAndPeriod[]).map(i => `${i.interval}/${i.periodicity}`).join(',') as IEocOwsTimeDimension['values'];\r\n        }\r\n      } else {\r\n        td.values = `${layer.dimensions.time.values.interval}/${layer.dimensions.time.values.periodicity}`;\r\n      }\r\n      dimensions.push(td);\r\n    }\r\n\r\n    if (layer?.dimensions?.elevation) {\r\n      const td: IEocOwsElevationDimension = {\r\n        name: 'elevation',\r\n        value: layer.dimensions.elevation.values,\r\n        units: layer.dimensions.elevation.units\r\n      };\r\n      if (layer.dimensions.elevation.display) {\r\n        td.display = layer.dimensions.elevation.display;\r\n      }\r\n      dimensions.push(td);\r\n    }\r\n\r\n    if (dimensions.length) {\r\n      return dimensions;\r\n    } else {\r\n      return null;\r\n    }\r\n  }\r\n}\r\n","import { WpsClient as WCBasic, WpsVersion, Cache } from '@dlr-eoc/utils-ogc';\r\nimport { Injectable, Inject } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\n\r\n\r\n/**\r\n * This file exports a wrapper around @dlr-eoc/utils-ogc/Wps for backwards compatibility.\r\n * While the WPS functionality has been moved to utils-ogc, we still maintain this wrapper\r\n * so that older clients don't need to change their imports.\r\n */\r\n\r\n\r\nexport { Cache, FakeCache } from '@dlr-eoc/utils-ogc';\r\nexport { WpsDataDescription, WpsInputDescription, WpsOutputDescription, WpsData, WpsInput, WpsResult,\r\n    WpsBboxDescription, WpsBboxValue, WpsBboxData, WpsVersion, WpsDataFormat,\r\n    WpsState, WpsCapability, WpsProcessDescription, WpsServerDescription, WpsMarshaller } from '@dlr-eoc/utils-ogc';\r\n\r\n\r\n@Injectable()\r\nexport class WpsClient extends WCBasic {\r\n    constructor(\r\n        @Inject('WPS_VERSION') version: WpsVersion = '1.0.0',\r\n        private webClient: HttpClient,\r\n        @Inject('WPS_CACHE') cache?: Cache\r\n    ) {\r\n        super(version, webClient, cache);\r\n    }\r\n}\r\n","import { WmsClient } from '@dlr-eoc/utils-ogc';\r\nimport { Injectable, Inject } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\n\r\n\r\n/**\r\n * This file exports a wrapper around @dlr-eoc/utils-ogc/Wms for backwards compatibility.\r\n * While the WMS functionality has been moved to utils-ogc, we still maintain this wrapper\r\n * so that older clients don't need to change their imports.\r\n */\r\n\r\n\r\nexport { WmsVersion } from '@dlr-eoc/utils-ogc';\r\n\r\n\r\n@Injectable()\r\nexport class WmsService extends WmsClient {\r\n    constructor(\r\n        webClient: HttpClient,\r\n    ) {\r\n        super(webClient);\r\n    }\r\n}","/*\r\n * Public API Surface of services-ogc\r\n */\r\n\r\nexport * from './lib/owc/owc-json.service';\r\nexport * from './lib/owc/types/owc-json';\r\nexport * from './lib/owc/types/owc-json.utils';\r\nexport * from './lib/owc/types/eoc-owc-json';\r\nexport * from './lib/wps/wpsclient';\r\nexport * from './lib/wmts/wmtsclient.service';\r\nexport * from './lib/wms/wmsclient.service';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["getProjection","i1.WmtsClientService","i2","WCBasic"],"mappings":"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"}