Open Geospatial Consortium

Submission Date: TBD

Approval Date: TBD

Publication Date: TBD

External identifier of this OGC® document: http://www.opengis.net/doc/BP/eo-data-access-bp

Internal reference number of this OGC® document: 16-118

URL for this OGC® document: https://eox-a.github.io/eo-data-access-bp/

PDF version: https://eox-a.github.io/eo-data-access-bp/index.pdf

Version: 0.0.1draft

Category: OGC® Best Practice

Editor: Stephan Meißl

OGC® EO Data Access Best Practice

Copyright notice

Copyright © 2016, 2017 Open Geospatial Consortium

To obtain additional rights of use, visit http://www.opengeospatial.org/legal/

Warning

This document is not an OGC Standard. This document is distributed for review and comment. This document is subject to change without notice and may not be referred to as an OGC Standard.

Recipients of this document are invited to submit, with their comments, notification of any relevant patent rights of which they are aware and to provide supporting documentation.

Document type: OGC® Best Practice

Document subtype: Profile

Document stage: Draft proposed version

Document language: English

License Agreement

Permission is hereby granted by the Open Geospatial Consortium, ("Licensor"), free of charge and subject to the terms set forth below, to any person obtaining a copy of this Intellectual Property and any associated documentation, to deal in the Intellectual Property without restriction (except as set forth below), including without limitation the rights to implement, use, copy, modify, merge, publish, distribute, and/or sublicense copies of the Intellectual Property, and to permit persons to whom the Intellectual Property is furnished to do so, provided that all copyright notices on the intellectual property are retained intact and that each person to whom the Intellectual Property is furnished agrees to the terms of this Agreement.

If you modify the Intellectual Property, all copies of the modified Intellectual Property must include, in addition to the above copyright notice, a notice that the Intellectual Property includes modifications that have not been approved or adopted by LICENSOR.

THIS LICENSE IS A COPYRIGHT LICENSE ONLY, AND DOES NOT CONVEY ANY RIGHTS UNDER ANY PATENTS THAT MAY BE IN FORCE ANYWHERE IN THE WORLD.

THE INTELLECTUAL PROPERTY IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS NOTICE DO NOT WARRANT THAT THE FUNCTIONS CONTAINED IN THE INTELLECTUAL PROPERTY WILL MEET YOUR REQUIREMENTS OR THAT THE OPERATION OF THE INTELLECTUAL PROPERTY WILL BE UNINTERRUPTED OR ERROR FREE. ANY USE OF THE INTELLECTUAL PROPERTY SHALL BE MADE ENTIRELY AT THE USER’S OWN RISK. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR ANY CONTRIBUTOR OF INTELLECTUAL PROPERTY RIGHTS TO THE INTELLECTUAL PROPERTY BE LIABLE FOR ANY CLAIM, OR ANY DIRECT, SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM ANY ALLEGED INFRINGEMENT OR ANY LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR UNDER ANY OTHER LEGAL THEORY, ARISING OUT OF OR IN CONNECTION WITH THE IMPLEMENTATION, USE, COMMERCIALIZATION OR PERFORMANCE OF THIS INTELLECTUAL PROPERTY.

This license is effective until terminated. You may terminate it at any time by destroying the Intellectual Property together with all copies in any form. The license will also terminate if you fail to comply with any term or condition of this Agreement. Except as provided in the following sentence, no such termination of this license shall require the termination of any third party end-user sublicense to the Intellectual Property which is in force as of the date of notice of such termination. In addition, should the Intellectual Property, or the operation of the Intellectual Property, infringe, or in LICENSOR’s sole opinion be likely to infringe, any patent, copyright, trademark or other right of a third party, you agree that LICENSOR, in its sole discretion, may terminate this license without any compensation or liability to you, your licensees or any other party. You agree upon termination of any kind to destroy or cause to be destroyed the Intellectual Property together with all copies in any form, whether held by you or by any third party.

Except as contained in this notice, the name of LICENSOR or of any other holder of a copyright in all or part of the Intellectual Property shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Intellectual Property without prior written authorization of LICENSOR or such copyright holder. LICENSOR is and shall at all times be the sole entity that may authorize you or any third party to use certification marks, trademarks or other special designations to indicate compliance with any LICENSOR standards or specifications. This Agreement is governed by the laws of the Commonwealth of Massachusetts. The application to this Agreement of the United Nations Convention on Contracts for the International Sale of Goods is hereby expressly excluded. In the event any provision of this Agreement shall be deemed unenforceable, void or invalid, such provision shall be modified so as to make it valid and enforceable, and as so modified the entire Agreement shall remain in full force and effect. No decision, action or inaction by LICENSOR shall be construed to be a waiver of any rights or remedies available to it.

Table of Contents

i. Abstract

This OGC Best Practice document provides conventions and recommendations on how to utilize OGC services to provide access to Earth Observation data.

Suggested additions, changes, and comments on this draft document are welcome and encouraged. Such suggestions may be submitted by email message or by making suggested changes in an edited copy of this document.

ii. Keywords

The following are keywords to be used by search engines and document catalogues.

ogcdoc, OGC document, eo, earth observation, data access, wcs, eo-wcs

iii. Preface

This OGC Best Practice document details proposed configuration and instantiation conventions and recommendations on how to utilize OGC services for access to Earth Observation (EO) data. These proposed conventions and recommendations have been developed in the European Space Agency (ESA) funded project Evolution of EO Online Data Access Services (EVO-ODAS).

It is defined how to utilize OGC’s Web Coverage Service (WCS) with EO products including generic conventions and recommendations for data and metadata mapping and conversions which are to be used in concrete tailorings for specific missions. It further considers how to link to other services like CSW, OpenSearch, WMS, WMTS, DS-EO, and WPS.

Suggested additions, changes, and comments on this draft document are welcome and encouraged. Such suggestions may be submitted by email message to the document editor or contributors named above, by creating an issue or a pull request at the GitHub repository, or by making suggested changes in an edited copy of this document.

The OGC ® Abstract Specification does not require any changes to accommodate the technical contents of this (part of this) document.

Attention is drawn to the possibility that some of the elements of this document may be the subject of patent rights. The Open Geospatial Consortium shall not be held responsible for identifying any or all such patent rights.

Recipients of this document are requested to submit, with their comments, notification of any relevant patent claims or other intellectual property rights of which they may be aware that might be infringed by any implementation of the standard set forth in this document, and to provide supporting documentation.

iv. Submitting organizations

The following organizations submitted this Document to the Open Geospatial Consortium (OGC):

Organization name(s)

v. Submitters

All questions regarding this submission should be directed to the editor or the submitters:

Name Affiliation

Stephan Meißl <stephan.meissl@eox.at>

EOX IT Services GmbH

Peter Baumann <p.baumann@jacobs-university.de>

Jacobs University Bremen

Andrea Aime <andrea.aime@geo-solutions.it>

GeoSolutions S.A.S.

1. Scope

This OGC Best Practice document details configuration and instantiation conventions for access to Earth Observation (EO) data. It defines how to utilize EO-WCS with EO products including generic conventions and recommendations for data and metadata mapping and conversion which are to be used in concrete tailoring for specific missions. It further considers how to link to other services like CSW, WMS, and WPS.

1.1. Future Work

Suggested additions, changes, and comments on this draft document are welcome and encouraged. Such suggestions may be submitted by email message to the document editor or contributors named above, by creating an issue or a pull request at the GitHub repository, or by making suggested changes in an edited copy of this document.

Presently, this document is a living document until officially submitted to OGC seeking formal adoption. Below is a list of items that are currently worked on or that could be worked on in future activities.

1.1.1. Cross Service Interaction

Detailing how to structure the data offered in the various services as well as how to explicitly link between those services. The OGC services under consideration are: OpenSearch, WMS, WMTS, WCS, and DS-EO.

There is a proposal available in the: "EVO-ODAS Recommendation on building a discovery interface using OpenSearch Technical Note (EVOODAS-TN-GEO-4112 version 1.3.0 from 2017-10-24)" developed in parallel by GeoSolutions on how to address this item for linking from OpenSearch to the other services.

For the other linking mechanisms a proposal still needs to be worked on.

1.1.2. Coverage Collections

Adding support for typical EO concepts like multi-resolution products or cloud masks to OGC services including registration in those services.

We propose to carefully review forthcoming CIS 1.1 against EO-WCS 1.1 particularly how far it accomplishes the grouping concepts proposed in there.

Further we propose to review the idea to derive DatasetSeries subtypes as described in the relevant section below.

Finally the Collection and Product Registration using a HTTP REST API for programmatic collection and product registration probably based on WCS-T needs to be drafted.

Product registration has been tested in the EVO-ODAS initiative by defining the contents of a product.zip package and sending them to the HTTP REST API for registration. The contents are defined as:

  • product.json - Product metadata in GeoJSON format.

  • granules.json - Metadata linking to the actual data again in GeoJSON `format.

  • thumbnail.jpg - An optional thumbnail image.

  • metadata.xml - Optional EO-O&M formated metadata.

  • owsLinks.json - Optional links to OGC services including template tags in `JSON format.

  • description.html - Optional description in HTML format.

1.1.3. Condense Coverage Description Information

Applying performance optimizations to facilitate and enable modern web based applications.

The OpenSearch SRU (Search and Retrieval via URL) extension needs to be investigated for suitability. Alternatively the already drafted usage of a new parameter named view needs to be further pursued and elaborated.

Additionally the proposal for the item Explore Coverages by Dimension right below holds some interesting concepts also for this item like the GetHistogram request.

1.1.4. Explore Coverages by Dimension

There is a proposal for compact domain inspection and histogram generation available in the: "EVO-ODAS Multidimensional WMTS domain discovery Technical Note (EVOODAS-TN-GEO-4111_WMTS version 1.0 from 2016-05-23)". This work has already been presented to OGC’s WMS SWG. We propose to pursue the adoption of this document in the WMS SWG and in parallel validate and document the usage in the EO domain in the present Best Practice document.

1.1.5. WCS Masking Extension

Proposing support for retrieving non-rectangular subsets of coverages from WCS.

This needs to be drafted.

1.1.6. Filtering via Common Query Language (CQL)

Sometimes it would be interesting to being able to filter the responses from certain services like for example OpenSearch and WMS in the same way. This means that in the WMS GetMap request only those products are rendered that are also returned via an OpenSearch query. A nice way to accomplish this is allowing to use a specific parameter called for examples cql_filter in all services where this functionality is needed. The value of this parameter could hold any valid CQL query and thus when using the same query on different services accomplishes the desired behavior.

This solution has been tested and verified to some extend in the EVO-ODAS initiative. The next step would be formal documentation that could be part of this Best Practice document.

1.1.7. Integration of Access and Processing Services

Access and processing services both need to be located near the storage facilities to improve the performance when working on large EO time series. Thus these services are often available on top of the same data. It needs to be investigated how access services can effectively utilize and interface with the processing infrastructure and algorithms for user-defined information extraction. Furthermore a standardized procedure and interface is needed to reference EO products from discovery and access services as input to processing, so that a user can execute a process based on the results of a previous product search.

An idea to investigate is to use OpenSearch queries as exchange mechanism, i.e., to specify data input for WPS or WCS processing via WCPS.

1.1.8. Cloud Optimized GeoTIFF (COG)

We recommend to review a recent proposal named Cloud Optimized GeoTIFF (COG, http://www.cogeo.org) for suitability as an alternative way to download EO data.

1.1.9. Caching and tiling in WCS

For certain use cases it is desirable to optimally support clients as well as intermediate nodes on the web in caching responses to WCS requests. Caching is an implementation detail most HTTP software has natively build in using a certain set of HTTP headers to control behavior. However, this caching is not available when using query strings as in KVP encoding or POST requests. Thus, for caching, the invocation via REST potentially using JSON encoding is of high interest.

In OGC discussions about a Web Coverage Tile Service (WCTS) have started in a dedicated working group. Most likely this service will include considerations about caching which should be evaluated and harmonized.

1.1.10. Asynchronous Requests Extension

Support for asynchronous requests for example for large downloads via GetCoverage or uploads via InsertCoverage that potentially need long processing times on the server is currently not available in WCS.

We propose to review the simple approach taken in DS-EO for suitability and develop a WCS extension to support asynchronous requests. Note that as per OAB and agreed by WPS experts, a bridging WCS-WPS Application Profile is not a suitable option.

1.1.11. Summary

A summary for the intended use and benefits of EO-WCS 1.1 is planned to be added.

2. Conformance

This document establishes the following requirements and conformance classes:

TODO

3. Normative references

The following normative documents contain provisions that, through reference in this text, constitute provisions of this specification. For dated references, subsequent amendments to, or revisions of, any of these publications do not apply. For undated references, the latest edition of the normative document referred to applies.

OGC 06-121r9, OGC Web Services Common Standard, version 2.0

OGC 09-146r2, OGC® Coverage Implementation Schema (renamed from OGC® GML Application Schema - Coverages), version 1.0

OGC 09-110r4, OGC® WCS 2.0 Interface Standard- Core: Corrigendum, version 2.0

OGC 10-140r2, OGC® Web Coverage Service 2.0 Interface Standard - Earth Observation Application Profile, version 1.1

OGC 11-053r1, OGC® Web Coverage Service Interface Standard - CRS Extension, version 1.0 OGC 12-039, OGC® Web Coverage Service Interface Standard - Scaling Extension, version 1.0

OGC 12-040, OGC® Web Coverage Service Interface Standard - Range Subsetting Extension, version 1.0

OGC 12-049, OGC® Web Coverage Service Interface Standard - Interpolation Extension, version 1.0

OGC 09-147r3, OGC® Web Coverage Service 2.0 Interface Standard - KVP Protocol Binding Extension - Corrigendum, version 1.0

OGC 09-149r1, OGC® Web Coverage Service 2.0 Interface Standard - XML/SOAP Protocol Binding Extension, version 1.0

OGC 12-100r1, OGC® GML Application Schema - Coverages - GeoTIFF Coverage Encoding Profile, version 1.0

OGC 14-100r2, OGC® CF-netCDF 3.0 encoding using GML Coverage Application Schema, version 2.0

OGC 12-108, OGC® GML Application Schema - Coverages JPEG2000 Coverage Encoding Extension, version 1.0

OGC 10-157r4, OGC® Earth Observation Metadata profile of Observations & Measurements, version 1.1

OGC 07-063r1, OpenGIS® Web Map Services - Profile for EO Products, version 0.3.3

OpenSearch Parameter extension, version 1.0 Draft 2, accessed 2016-43-20, http://www.opensearch.org/Specifications/OpenSearch/Extensions/Parameter/1.0/Draft_2

OGC 13-026r8, OGC® OpenSearch Extension for Earth Observation, version 1.0

OGC 13-043, OGC Download Service for Earth Observation Products Best Practice, version 1.0

4. Terms and definitions

This document uses the standard terms defined in Subclause 5.3 of [OGC 06-121r9], which is based on the ISO/IEC Directives, Part 2, Rules for the structure and drafting of International Standards. In particular, the word "shall" (not "must") is the verb form used to indicate a requirement to be strictly followed to conform to this standard.

For the purposes of this document, the following additional terms and definitions apply. An arrow "→" indicates that the following term is defined in this Clause.

4.1. Coverage

digital representation of a spatio-temporally varying phenomenon as defined in

Dataset

Note
A Dataset usually represents observations obtained by satellite instruments.

4.2. Dataset Series

collection of → EO Coverages

4.3. EO Coverage

Rectified Grid → Coverage or Referenceable Grid → Coverage having an → EO Metadata record and a WGS84 footprint

4.4. EO Metadata

EO Coverage’s metadata record

4.5. Stitched Mosaic

EO Coverage composed from subsets of one or more co-referenced → Datasets

4.6. EO Product

An EO Product contains one or more related → EO Product Datasets plus metadata and optionally auxiliary data like → EO Product Quicklooks.

4.7. EO Product Dataset

One or more files each containing one or more → EO Coverages.

4.8. EO Product Quicklook

A visual representation of a usually reduced → EO Product Dataset encoded in an image format. The → EO Product Dataset may combine different bands.

4.9. Lineage record

Data structure documenting an operation that has been applied to the → Coverage it is part of

4.10. refers to

contains, in its → EO Metadata element as defined in [OGC 10-157r4], the → EO Metadata element of

5. Conventions

5.1. UML notation

Unified Modeling Language (UML) static structure diagrams appearing in this specification are used as described in Subclause 5.2 of OGC Web Services Common [OGC 06-121r9].

5.2. Data dictionary tables

The UML model data dictionary is specified herein in a series of tables. The contents of the columns in these tables are described in Subclause 5.5 of [OGC 06-121r9]. The contents of these data dictionary tables are normative, including any table footnotes.

5.3. Namespace prefix conventions

The following namespaces are used in this document. The prefix abbreviations used constitute conventions used here, but are not normative. The namespaces to which the prefixes refer are normative, however.

Table 1. Namespace mappings
Prefix Namespace URI Description

xsd

http://www.w3.org/2001/XMLSchema

XML Schema namespace

ows

http://www.opengis.net/ows/2.0

OWS Common 2.0

gml

http://www.opengis.net/gml/3.2

GML 3.2.1

gmlcov

http://www.opengis.net/gmlcov/1.0

Coverages Implementation Schema 1.0

wcs

http://www.opengis.net/wcs/2.0

WCS 2.0

eop

http://www.opengis.net/eop/2.1

Earth Observation Metadata Profile of Observations and Measurements

opt

http://www.opengis.net/opt/2.1

Optical Earth Observation Metadata Profile of Observations and Measurements (extension of eop)

sar

http://www.opengis.net/sar/2.1

SAR Earth Observation Metadata Profile of Observations and Measurements (extension of eop)

wcseo

http://www.opengis.net/wcs/wcseo/1.1

WCS Application Profile - Earth Observation 1.1

scal

http://www.opengis.net/wcs/scaling/1.0 (schema uses http://www.opengis.net/WCS_service-extension_scaling/1.0)

WCS Scaling Extension

int

http://www.opengis.net/wcs/interpolation/1.0 (schema uses http://www.opengis.net/WCS_service-extension_interpolation/1.0

WCS Interpolation Extension

crs

http://www.opengis.net/wcs/crs/1.0

WCS CRS Extension

gmd

http://www.isotc211.org/2005/gmd

ISO 19139 Metadata

gmi

http://standards.iso.org/iso/19115/-2/gmi/1.0 or http://www.isotc211.org/2005/gmi

ISO 19139-2 Metadata

mdb

http://standards.iso.org/iso/19115/-3/mdb/1.0

ISO 19115-3 Metadata

5.4. Multiple representations

When multiple representations of the same information are given in a specification document these are consistent. Should this not be the case then this is considered an error, and the XML Schema shall take precedence.

6. Introduction

The Earth Observation Data Access Best Practice document at hand provides a detailed look at the access to EO data from an OGC perspective.

EO data is typically available as raster data or, in OGC terminology, as coverages. Thus the main OGC service relevant for the data access task is the Web Coverage Service (WCS) and its Earth Observation Application Profile (EO-WCS). Nonetheless further OGC services like the Web Map Service (WMS) and the Web Map Tile Service (WMTS) for visualization, the Catalog Service (CSW, OpenSearch) for discovery, or the Web Processing Service (WPS) for processing need to be taken into account in order to provide a well integrated solution for data consumers.

6.1. EO-WCS

The WCS 2.0 Earth Observation Application Profile (EO-WCS) [OGC 10-140r2] has been adopted by OGC defining a profile of WCS 2.0 for use on Earth Observation data. Naturally the present document focuses on EO-WCS but makes sure not to forget the surroundings to put it into context.

EO-WCS adds some concepts relevant for the EO domain on one side and some constraints on the other to the generic WCS:

  • Specific Earth Observation coverages (EO Coverage or Dataset) which have at least a footprint on Earth as well as a temporal validity extent. Each EO Coverage has to have an EO Metadata set [OGC 10-157r4] contained in its metadata which describes the coverage on hand on a higher semantic level.

  • Heterogeneous groupings or collections of Datasets into Dataset Series. This hierarchy allows for an efficient retrieval of metadata as well as data via the newly added DescribeEOCoverageSet and GetEOCoverageSet operations respectively.

Note
Although named Dataset Series this concept can and should be used to group together any Datasets. An example is to group together the Datasets stemming from a multi-resolution satellite image to form an EO Product.
Note
Dataset Series may also include other Dataset Series as well as Stitched Mosaics
Note
Dataset Series themselves are not coverages.
  • Homogeneous groupings or collections of spatially non-overlapping subsets of Datasets into Stitched Mosaics.

Note
Stitched Mosaics are accessible themselves as coverages.
  • DescribeEOCoverageSet operation allowing to retrieve metadata from collections applying spatial and/or temporal constraints.

  • GetEOCoverageSet operation allowing to retrieve data from collections applying spatial and/or temporal constraints.

  • Constraint mandatory WCS extensions.

One of the motivations to introduce the concept of Dataset Series is to limit the size of capabilities responses. They only need to report the identifiers of Dataset Series instead of summaries for all coverages available. Metadata for individual coverages is obtained using the new DescribeEOCoverageSet operation. This operation supports basic spatial and temporal searching as well as paging and thus stepping through the available data. Figure 1 shows the sequence to use EO-WCS.

EO-WCS Sequence Diagram
Figure 1. Sequence diagram showing the exploitation of EO-WCS

6.2. Further relevant OGC Services

Before downloading data it is typically desired or at least useful to view the data and metadata. The OGC service standardized for data viewing is the Web Map Service (WMS). For the EO domain the Web Map Services - Profile for EO Products (EO-WMS) [07-063r1] has been designed. This WMS profile allows to browse through collections using the time parameter on one layer. Provided that the same data is available from the EO-WCS Dataset Series and the EO-WMS collection layer a combined exploitation of EO-WCS and EO-WMS as shown in Figure 2 is feasible.

EO-WMS & EO-WCS Sequence Diagram
Figure 2. Sequence diagram showing the combined exploitation of EO-WCS and EO-WMS

Of course the WMS in this scenario can easily be replaced by the Web Map Tile Service (WMTS) specifically designed to improve the performance of WMS.

Further OGC standardized services to take into account are the Catalog Service (CSW, OpenSearch) for discovery, the Download Service for Earth Observation Products Best Practice (DS-EO) [13-043] as well as the Web Processing Service (WPS).

6.3. Topics Covered

Centered around EO-WCS this Best Practice document defines conventions and makes recommendations for the following topics:

7. Cross Service Interaction

7.1. Overview

In a number of scenarios and use cases it is necessary to be able to link from one service to another, holding e.g. different views on the same data. For example a user might first be presented with an RGB view on some data via WMS before downloading the actual data, that is, full bands via WCS. The question is, how is a client supposed to construct WCS requests for the same product just seen via WMS? Currently there is no standard way defined how to provide such links.

We propose to address the cross service interaction item by giving recommendations on how to structure the data offered in the various services as well as how to explicitly link between them. These explicit link recommendations include these services: OpenSearch, WMS, WMTS, WCS, and DS-EO.

An example for a data structuring recommendation is that for a collection there should be an EO-WMS layer and an EO-WCS DatasetSeries provided both reusing the ID of the collection. Thus clients know that a product viewed via a GetMap request with TIME parameter can be downloaded via a GetEOCoverageSet request using the same TIME parameter value.

First explicit linking recommendations are given in the "EVO-ODAS Recommendation on building a discovery interface using OpenSearch Technical Note (EVOODAS-TN-GEO-4112 version 1.3.0 from 2017-10-24)" by GeoSolutions. The recommendation there is to use OWC ATOM offering elements linking to the EO Product in the respective service. Note that it also includes recommendations on how to structure these links in order to link to a single product. In short the recommendation is to link to a tailored Capabilities document like e.g., http://u.rl?service=WMS&acceptVersions=1.3.0&request=GetCapabilities&layers=S2. This covers all links from OpenSearch to any other service.

In the same way recommendations will be given from (EO-)WMS, WMTS, (EO-)WCS, and DS-EO to the respective four other services using for example wms:DataURL, in the layer specification of the WMS Capabilities linking to the corresponding EO-WCS DatasetSeries.

TODO

8. rangeType Description Enhancements

8.1. Overview

The rangeType component of a coverage describes the common data type all this coverage’s range values (such as pixels) share. In programming languages, this typically consists of differentiating between signed integer, unsigned integer, float, etc.

The rangeType concept, however, goes far beyond such classical data typing; adopting OGC O&M definitions, a comprehensive semantics description can be expressed indicating the range value type (which can be a classical data type such as "non-negative integer", but can also denote application semantics such as "radiation", "SAR") given by a URL, a definition of the unit of measure of the values, null values, and several more can be expressed.

In the basic, domain-agnostic OGC Coverage Implementation Schema (CIS, formerly known as GML Application Schema, GMLCOV) only these general items are defined. EO-WCS 1.1 extends this range type description, as it is used in WCS 2, with EO-specific detail information.

The extension includes elements to specify the measured physical properties (wcseo:dataSemantics), the data types of stored numbers (wcseo:dataType), the conversion from stored numbers to physical properties (wcseo:dataType2dataSemantics), as well as a hint for how to generate a RGB version (wcseo:RGBgenerationHint).

The additional range type information is provided via the wcseo:rangeTypeExtension element which is either included once for the whole range type under the swe:DataRecord element or separately for each channel, often referred to as band, under each swe:DataRecord/swe:field/swe:Quantity element. It may also be included in both locations for example when there is one common RGB generation hint but the data conversion is specific for each band.

The new elements are introduced one by one in the following sections and extensive examples are given below.

8.2. Physical Properties

The wcseo:rangeTypeExtension element first includes the wcseo:dataSemantics element of type anyURI. This element holds an URI preferably resolving to a description of the observed physical property like http://sweet.jpl.nasa.gov/2.3/stateSpectralBand.owl#Visible.

This element needs to be synchronized with the definition attribute of each swe:Quantity element as well as the unit of measure defined via the code attribute of the swe:uom element again of each swe:Quantity element.

XML instance examples included with the OGC schemas make use of http://www.opengis.net/def/property/OGC/0/Radiance for the definition attribute which doesn’t resolve to something useful as expected. Another URI used in OGC examples is http://sweet.jpl.nasa.gov/2.0/physRadiation.owl#Radiance. The latest version of this at the time of writing is http://sweet.jpl.nasa.gov/2.3/propEnergyFlux.owl#Radiance.

It is suspected that the ESA funded projects RARE, SMAAD, OBEOS, and/or PRODTREES define URIs to describe physical properties as well. However, a web research didn’t bring up anything useful in this direction. Thus, for the time being, the examples given use the SWEET ontologies defined by the NASA Jet Propulsion Laboratory (http://sweet.jpl.nasa.gov).

An example for a unit of measure code is W.m-2.sr-1 as defined by http://sweet.jpl.nasa.gov/2.3/reprSciUnits.owl#wattPerMeterSquaredPerSteradian for radiance as used above.

SWE Common mandates the usage of units as defined by http://aurora.regenstrief.org/UCUM. However, this server is not accessible anymore and seems to be moved to http://unitsofmeasure.org/ucum.html.

Another physical property example is spectral radiance with URI http://sweet.jpl.nasa.gov/2.3/propEnergyFlux.owl#SpectralRadiance and unit of measure code W.m-2.sr-1.nm-1 as defined by http://sweet.jpl.nasa.gov/2.3/reprSciUnits.owl#wattPerMeterSquaredPerSteradianPerWavelength.

8.3. Data Types

The wcseo:rangeTypeExtension element further includes the wcseo:dataType element, again of type anyURI. This element again holds an URI preferably resolving to a description of the data type. Examples of such URIs are http://www.opengis.net/def/dataType/OGC/1.1/nonNegativeInteger, http://www.opengis.net/def/dataType/OGC/0/unsignedInt, or http://www.opengis.net/def/property/netcdf/1.0/unsignedShort.

The data type is also implicitly provided via the actual coverage encoding. However, to describe it explicitly in the wcseo:rangeTypeExtension element allows clients to retrieve it also in coverage descriptions and without need to understand and parse the actual coverage encoding format.

8.4. Conversion from Data Types to Physical Properties

In order to be able to convert the stored numbers to the value of the actual measured physical property the wcseo:dataType2dataSemantics element is added to the wcseo:rangeTypeExtension. It describes the conversion via two real number intervals and a type.

wcseo:intervalFrom gives the interval of values stored in the coverage, wcseo:intervalTo specifies the interval the stored values are converted to, and wcseo:type defines which conversion method to use. Both intervals are given via two real numbers and the type via anyURI.

The example below describes a linear transformation, as typically used for optical data, from \$[1,4095\$] to \$[390.0000,780.0000\$] i.e. for a value \$x\$ between \$1\$ and \$4095\$ the actual measured value \$y\$ is calculated as: \$y = 390 + (x-1) * (780-390) / (4095-1)\$

<wcseo:dataType2dataSemantics>
  <wcseo:intervalFrom>1 4095</wcseo:intervalFrom>
  <wcseo:intervalTo>390.0000 780.0000</wcseo:intervalTo>
  <wcseo:type>http://sweet.jpl.nasa.gov/2.3/reprMathFunction.owl#Linear</wcseo:type>
</wcseo:dataType2dataSemantics>

Another example, given below, describes the inverse to a logarithmic transformation as for example sometimes used for radar data. The transformation of stored values \$x\$ in the interval \$[1,65535\$] to observed values \$y\$ in the interval \$[2,1000000000\$] is given by \$y = 2 * e^(((x-1)*(ln(1000000000)-ln(2)))/(65535-1))\$.

<wcseo:dataType2dataSemantics>
  <wcseo:intervalFrom>1 65535</wcseo:intervalFrom>
  <wcseo:intervalTo>2 1000000000</wcseo:intervalTo>
  <wcseo:type>http://sweet.jpl.nasa.gov/2.3/reprMathFunction.owl#ExponentialFunction</wcseo:type>
</wcseo:dataType2dataSemantics>

8.5. Hint for RGB Generation

The last element in the wcseo:rangeTypeExtension element is the wcseo:RGBgenerationHint element. It is meant to provide a hint for clients wanting to visualize the data. It includes the elements wcseo:bandSequence, wcseo:intervalFrom, wcseo:intervalTo, and wcseo:type. The first is a list of three band names or band arithmetic instructions delimited by spaces used for the three bands to generate the RGB version. The names used shall be equal to name attributes of the respective swe:field element. The other three elements are comparable to the ones used in the data conversion above.

The example below describes the RGB generation from a single band product by reusing the single band three times and logarithmically stretching the interval \$[100,10000000\$] to \$[1,255\$] i.e. value \$x\$ is converted to \$y\$ using \$y = ((ln(x)-ln(100))*(255-1))/(ln(10000000)-ln(100))+1\$.

<wcseo:RGBgenerationHint>
  <wcseo:bandSequence>gray gray gray</wcseo:bandSequence>
  <wcseo:intervalFrom>100 10000000</wcseo:intervalFrom>
  <wcseo:intervalTo>1 255</wcseo:intervalTo>
  <wcseo:type>http://sweet.jpl.nasa.gov/2.3/reprMathFunction.owl#Logarithmic</wcseo:type>
</wcseo:RGBgenerationHint>

This section details our recommendations for the most commonly used data as well as for data not covered here. Of course data providers are free to choose any definitions, it’s just highly recommended to use resolvable URIs providing meaningful descriptions ideally machine as well as human readable.

8.6.1. wcseo:dataSemantics, swe:Quantity/@definition, and swe:uom/@code

The non-exhaustive list below provides recommendations for the values of the three items wcseo:dataSemantics, definition attribute of swe:Quantity, and code attribute of swe:Quantity/swe:uom for the most common use cases.

8.6.3. wcseo:type in wcseo:dataType2dataSemantics and wcseo:RGBgenerationHint

Recommendations for possible values for the wcseo:type element used to define data conversions are provided below.

8.6.4. wcseo:bandSequence

The wcseo:bandSequence element used in the wcseo:RGBgenerationHint is defined as type NameTriple which is a space delimited list of three elements of type anyURI. Typically these three elements each reference a name attribute of a swe:field element. An additional option is to define three arithmetic expression like \$"band1"*1/3+"band2"*2/3\$. Note that the arithmetic expressions themselves need to be URL-encoded and particularly must not include spaces. A valid example would be band1%2F3%2Bband2%2A2%2F3 band1%2A2%2F3%2Bband2%2F3 %28band1%2Bband3%29%2F2.

8.6.6. swe:field/@name vs. swe:field/swe:Quantity/swe:identifier

The name attribute of swe:field is defined as type NCName. This mainly means that it must not include characters like : (colon), @, $, %, &, /, +, ,, ;, or any whitespace characters. If further must not start with a number, minus, or dot.

The range subsetting extension of WCS [OGC 12-040] uses this name attribute in its RangeComponent element to select bands for retrieval.

Coverages, however, may use not NCName compliant IDs for their bands. It is, for example, quite common to identify variables within a netCDF file with strings including blanks or colons.

The swe:field element includes in its swe:Quantity element a swe:identifier element which is of type anyURI and can potentially hold any complex ID given it is URL-encoded.

For coverages using non NCName IDs for their bands it is recommended to provide the full IDs, potentially URL-encoded, in the swe:identifier element. It is further recommended to use the respective first word (NCNAME type substring i.e. starting from it’s first character up to and excluding the first character which is not allowed in an NCName) of the IDs for the name attributes.

For example an ID of gray band should use gray for the name attribute and gray%20band for the swe:identifier element.

8.7. Examples

The following provides an example gmlcov:rangeType element including additional range type information for RGB generation on swe:DataRecord level as well as data conversion information on swe:Quantity level.

<gmlcov:rangeType>
  <swe:DataRecord definition="http://www.opengis.net/def/property/OGC-EO/0/opt/SpectralMode/PANCHROMATIC">
    <swe:extension>
      <wcseo:rangeTypeExtension>
        <wcseo:RGBgenerationHint>
          <wcseo:bandSequence>gray gray gray</wcseo:bandSequence>
          <wcseo:intervalFrom>1 4095</wcseo:intervalFrom>
          <wcseo:intervalTo>1 255</wcseo:intervalTo>
          <wcseo:type>http://sweet.jpl.nasa.gov/2.3/reprMathFunction.owl#Logarithmic</wcseo:type>
        </wcseo:RGBgenerationHint>
      </wcseo:rangeTypeExtension>
    </swe:extension>
    <swe:label>Gray Channel/Band</swe:label>
    <swe:field name="gray">
      <swe:Quantity definition="http://sweet.jpl.nasa.gov/2.3/propEnergyFlux.owl#SpectralRadiance">
        <swe:extension>
          <wcseo:rangeTypeExtension>
            <wcseo:dataSemantics>http://sweet.jpl.nasa.gov/2.3/stateSpectralBand.owl#Visible</wcseo:dataSemantics>
            <wcseo:dataType>http://www.opengis.net/def/dataType/OGC/0/unsignedShort</wcseo:dataType>
            <wcseo:dataType2dataSemantics>
              <wcseo:intervalFrom>1 4095</wcseo:intervalFrom>
              <wcseo:intervalTo>390.0000 780.0000</wcseo:intervalTo>
              <wcseo:type>http://sweet.jpl.nasa.gov/2.3/reprMathFunction.owl#Linear</wcseo:type>
            </wcseo:dataType2dataSemantics>
          </wcseo:rangeTypeExtension>
        </swe:extension>
        <swe:identifier>gray</swe:identifier>
        <swe:label>Gray Channel/Band</swe:label>
        <swe:description>Gray Channel/Band</swe:description>
        <swe:nilValues>
          <swe:NilValues>
            <swe:nilValue reason="http://www.opengis.net/def/nil/OGC/0/unknown">0</swe:nilValue>
          </swe:NilValues>
        </swe:nilValues>
        <swe:uom code="W.m-2.sr-1.nm-1"/>
        <swe:constraint>
          <swe:AllowedValues>
            <swe:interval>0 4095</swe:interval>
            <swe:significantFigures>4</swe:significantFigures>
          </swe:AllowedValues>
        </swe:constraint>
      </swe:Quantity>
    </swe:field>
  </swe:DataRecord>
</gmlcov:rangeType>

The following is an example of a multispectral range type.

<gmlcov:rangeType>
  <swe:DataRecord definition="http://www.opengis.net/def/property/OGC-EO/0/opt/SpectralMode/MULTISPECTRAL">
    <swe:extension>
      <wcseo:rangeTypeExtension>
        <wcseo:RGBgenerationHint>
          <wcseo:bandSequence>red green blue</wcseo:bandSequence>
          <wcseo:intervalFrom>1 65535</wcseo:intervalFrom>
          <wcseo:intervalTo>1 255</wcseo:intervalTo>
          <wcseo:type>http://sweet.jpl.nasa.gov/2.3/reprMathFunction.owl#Logarithmic</wcseo:type>
        </wcseo:RGBgenerationHint>
      </wcseo:rangeTypeExtension>
    </swe:extension>
    <swe:label>Multispectral product</swe:label>
    <swe:field name="blue">
      <swe:Quantity definition="http://sweet.jpl.nasa.gov/2.3/propEnergyFlux.owl#SpectralRadiance">
        <swe:extension>
          <wcseo:rangeTypeExtension>
            <wcseo:dataSemantics>http://sweet.jpl.nasa.gov/2.3/stateSpectralBand.owl#Blue</wcseo:dataSemantics>
            <wcseo:dataType>http://www.opengis.net/def/dataType/OGC/0/unsignedShort</wcseo:dataType>
            <wcseo:dataType2dataSemantics>
              <wcseo:intervalFrom>1 65535</wcseo:intervalFrom>
              <wcseo:intervalTo>455.0 492.0</wcseo:intervalTo>
              <wcseo:type>http://sweet.jpl.nasa.gov/2.3/reprMathFunction.owl#Linear</wcseo:type>
            </wcseo:dataType2dataSemantics>
          </wcseo:rangeTypeExtension>
        </swe:extension>
        <swe:identifier>blue</swe:identifier>
        <swe:label>Blue Channel/Band</swe:label>
        <swe:description>Blue Channel/Band</swe:description>
        <swe:nilValues>
          <swe:NilValues>
            <swe:nilValue reason="http://www.opengis.net/def/nil/OGC/0/unknown">0</swe:nilValue>
          </swe:NilValues>
        </swe:nilValues>
        <swe:uom code="W.m-2.sr-1.nm-1"/>
        <swe:constraint>
          <swe:AllowedValues>
            <swe:interval>0 65535</swe:interval>
            <swe:significantFigures>5</swe:significantFigures>
          </swe:AllowedValues>
        </swe:constraint>
      </swe:Quantity>
    </swe:field>
    <swe:field name="green">
      <swe:Quantity definition="http://sweet.jpl.nasa.gov/2.3/propEnergyFlux.owl#SpectralRadiance">
        <swe:extension>
          <wcseo:rangeTypeExtension>
            <wcseo:dataSemantics>http://sweet.jpl.nasa.gov/2.3/stateSpectralBand.owl#Green</wcseo:dataSemantics>
            <wcseo:dataType>http://www.opengis.net/def/dataType/OGC/0/unsignedShort</wcseo:dataType>
            <wcseo:dataType2dataSemantics>
              <wcseo:intervalFrom>1 65535</wcseo:intervalFrom>
              <wcseo:intervalTo>492.0 557.0</wcseo:intervalTo>
              <wcseo:type>http://sweet.jpl.nasa.gov/2.3/reprMathFunction.owl#Linear</wcseo:type>
            </wcseo:dataType2dataSemantics>
          </wcseo:rangeTypeExtension>
        </swe:extension>
        <swe:identifier>green</swe:identifier>
        <swe:label>Green Channel/Band</swe:label>
        <swe:description>Green Channel/Band</swe:description>
        <swe:nilValues>
          <swe:NilValues>
            <swe:nilValue reason="http://www.opengis.net/def/nil/OGC/0/unknown">0</swe:nilValue>
          </swe:NilValues>
        </swe:nilValues>
        <swe:uom code="W.m-2.sr-1.nm-1"/>
        <swe:constraint>
          <swe:AllowedValues>
            <swe:interval>0 65535</swe:interval>
            <swe:significantFigures>5</swe:significantFigures>
          </swe:AllowedValues>
        </swe:constraint>
      </swe:Quantity>
    </swe:field>
    <swe:field name="yellow">
      <swe:Quantity definition="http://sweet.jpl.nasa.gov/2.3/propEnergyFlux.owl#SpectralRadiance">
        <swe:extension>
          <wcseo:rangeTypeExtension>
            <wcseo:dataSemantics>http://sweet.jpl.nasa.gov/2.3/stateSpectralBand.owl#Yellow</wcseo:dataSemantics>
            <wcseo:dataType>http://www.opengis.net/def/dataType/OGC/0/unsignedShort</wcseo:dataType>
            <wcseo:dataType2dataSemantics>
              <wcseo:intervalFrom>1 65535</wcseo:intervalFrom>
              <wcseo:intervalTo>557.0 597.0</wcseo:intervalTo>
              <wcseo:type>http://sweet.jpl.nasa.gov/2.3/reprMathFunction.owl#Linear</wcseo:type>
            </wcseo:dataType2dataSemantics>
          </wcseo:rangeTypeExtension>
        </swe:extension>
        <swe:identifier>yellow</swe:identifier>
        <swe:label>Yellow Channel/Band</swe:label>
        <swe:description>Yellow Channel/Band</swe:description>
        <swe:nilValues>
          <swe:NilValues>
            <swe:nilValue reason="http://www.opengis.net/def/nil/OGC/0/unknown">0</swe:nilValue>
          </swe:NilValues>
        </swe:nilValues>
        <swe:uom code="W.m-2.sr-1.nm-1"/>
        <swe:constraint>
          <swe:AllowedValues>
            <swe:interval>0 65535</swe:interval>
            <swe:significantFigures>5</swe:significantFigures>
          </swe:AllowedValues>
        </swe:constraint>
      </swe:Quantity>
    </swe:field>
    <swe:field name="orange">
      <swe:Quantity definition="http://sweet.jpl.nasa.gov/2.3/propEnergyFlux.owl#SpectralRadiance">
        <swe:extension>
          <wcseo:rangeTypeExtension>
            <wcseo:dataSemantics>http://sweet.jpl.nasa.gov/2.3/stateSpectralBand.owl#Orange</wcseo:dataSemantics>
            <wcseo:dataType>http://www.opengis.net/def/dataType/OGC/0/unsignedShort</wcseo:dataType>
            <wcseo:dataType2dataSemantics>
              <wcseo:intervalFrom>1 65535</wcseo:intervalFrom>
              <wcseo:intervalTo>597.0 622.0</wcseo:intervalTo>
              <wcseo:type>http://sweet.jpl.nasa.gov/2.3/reprMathFunction.owl#Linear</wcseo:type>
            </wcseo:dataType2dataSemantics>
          </wcseo:rangeTypeExtension>
        </swe:extension>
        <swe:identifier>orange</swe:identifier>
        <swe:label>Orange Channel/Band</swe:label>
        <swe:description>Orange Channel/Band</swe:description>
        <swe:nilValues>
          <swe:NilValues>
            <swe:nilValue reason="http://www.opengis.net/def/nil/OGC/0/unknown">0</swe:nilValue>
          </swe:NilValues>
        </swe:nilValues>
        <swe:uom code="W.m-2.sr-1.nm-1"/>
        <swe:constraint>
          <swe:AllowedValues>
            <swe:interval>0 65535</swe:interval>
            <swe:significantFigures>5</swe:significantFigures>
          </swe:AllowedValues>
        </swe:constraint>
      </swe:Quantity>
    </swe:field>
    <swe:field name="red">
      <swe:Quantity definition="http://sweet.jpl.nasa.gov/2.3/propEnergyFlux.owl#SpectralRadiance">
        <swe:extension>
          <wcseo:rangeTypeExtension>
            <wcseo:dataSemantics>http://sweet.jpl.nasa.gov/2.3/stateSpectralBand.owl#Red</wcseo:dataSemantics>
            <wcseo:dataType>http://www.opengis.net/def/dataType/OGC/0/unsignedShort</wcseo:dataType>
            <wcseo:dataType2dataSemantics>
              <wcseo:intervalFrom>1 65535</wcseo:intervalFrom>
              <wcseo:intervalTo>622.0 780.0</wcseo:intervalTo>
              <wcseo:type>http://sweet.jpl.nasa.gov/2.3/reprMathFunction.owl#Linear</wcseo:type>
            </wcseo:dataType2dataSemantics>
          </wcseo:rangeTypeExtension>
        </swe:extension>
        <swe:identifier>red</swe:identifier>
        <swe:label>Red Channel/Band</swe:label>
        <swe:description>Red Channel/Band</swe:description>
        <swe:nilValues>
          <swe:NilValues>
            <swe:nilValue reason="http://www.opengis.net/def/nil/OGC/0/unknown">0</swe:nilValue>
          </swe:NilValues>
        </swe:nilValues>
        <swe:uom code="W.m-2.sr-1.nm-1"/>
        <swe:constraint>
          <swe:AllowedValues>
            <swe:interval>0 65535</swe:interval>
            <swe:significantFigures>5</swe:significantFigures>
          </swe:AllowedValues>
        </swe:constraint>
      </swe:Quantity>
    </swe:field>
  </swe:DataRecord>
</gmlcov:rangeType>

9. Coverage Collections

9.1. Motivation

WCS originally was perceived to give access to single coverages taken from a flat set of coverage offerings on the server.

This approach was based on the classical subdivision into metadata services (i.e., catalogs) and data services, connected through some loose coupling (which effectively was never standardized beyond the recommendation to use URLs).

With the progress of requirements and technology it is more and more considered important to merge data and metadata perspectives with the vision of a common integrated information space.

For WCS, this means in particular to further structure a server’s offering of coverages along various criteria.

Early on EO-WCS has provided a lead in this by introducing both uniform and non-uniform coverage groupings together with dedicated search functionality which is able to perform a focused search within coverage subsets.

With OGC Coverage Implementation Schema (CIS) 1.1 comes massively enhanced support for structuring coverages. Therefore, a harmonization task has to be accomplished to relate both concepts, which may well lead to an extension of functionality for fully exploiting all benefits. One standardization opportunity might be to generalize EO groupings, phase in CIS 1.1 concepts, and establish a general WCS grouping extension.

A separate issue is how far recursion should be allowed: can a coverage grouping be part of another coverage grouping, with unlimited nesting? While the generality may be appealing it might pose severe extra complexity on implementations.

In the following subsections, we discuss EO-relevant grouping concepts, based on CIS and EO-WCS.

First, we address the special case of grouping coverages that share some critical common properties. Next, we generalize this to arbitrary groupings of coverages. Finally, we discuss registration issues.

9.2. Uniform Coverage Grouping

9.2.1. Overview

Uniform Coverage Groupings represent sets of coverages which are homogeneous enough that they can collectively appear as a single coverage from a WCS perspective - in particular, such items are amenable to GetCoverage requests. Aside from their positioning in space/time through the domain set there is no other particular order defined on such coverage sets.

Concretely, the requirements on the coverages contained in a Uniform Coverage Grouping are as follows (as a direct consequential of the definition of coverage):

  • all coverages contained shall have the same coverage type (i.e., combinations of Rectified and Referenceable Grid, or MultiPoint Coverages, are prohibited);

  • all coverages contained shall have the same range type (whereby it needs to be clarified when two range types are equal - for example, band names might be not constitutive while quantity, unit of measure, and nil values likely are);

  • all coverages contained shall have the same resolution;

  • all coverages contained shall have the same CRS in their domain set (note that this is not technically necessary for the boundedBy element which gives an informal, not necessarily minimal bounding box for a quick location determination);

  • for each direct position (i.e., pixel) in the spatial domain of the Uniform Coverage Grouping there shall be exactly one range value - in other words, there shall be no "holes" and no duplicate pixel values.

In the context of EO-WCS, the coverage subtype StitchedMosaic implements the Uniform Coverage Grouping.

9.2.2. A Concept for Uniform Coverage Groupings

TODO Idea: Derive DatasetSeries subtype where rangeType is fixed for all included coverages (maybe using schematron?). Make sure that this subtype is substitutable (substitutionGroup?) and instances still validate against EO-WCS 1.1 schemas.

9.2.3. Coverage Groupings in CIS 1.1 versus EO-WCS 1.1

CIS 1.1 offers a conformance class, coverage-partitioning, which allows splitting a coverage into pieces - in other words, a coverage can be composed from sub-coverages. This nesting of coverages actually is recursive, allowing to establish hierarchically nested coverages.

As the new partitioning functionality of CIS 1.1 still defines a - partitioned - coverage the same homogeneity criteria must hold as for "atomic" coverages: they must have a common range type and domain set CRS, and common range components ("bands", "variables") must not overlap. Note that the latter constraint allows that different sub-coverages can overlap in their domain set, but only when contributing to different range components; this way, bands stored in single files, for example, can be assembled into multi-band coverages.

EO-WCS, in comparison, allows coverages to overlap in a grouping, both in DatasetSeries as well as StitchedMosaics. In the latter, StitchedMosaics, the extra concept of a "contributing footprint" captures the overlap by indicating which pixel contributes to the coverage - effectively, the contributing footprint acts like a mask blanking out parts of a coverage, thereby achieving a unique pixel for each position while retaining overlap information. This - more involved - concept is not directly supported by the CIS 1.1 partitioning.

Obviously, there is a strong resemblance of concepts between CIS 1.1 and EO- WCS 1.1. We therefore propose to carefully review forthcoming CIS 1.1 and how far it accomplishes the grouping concepts proposed in this section.

Further, it should be noted that CIS 1.1 foresees a general object about which no further normative constraints are made. Collections of coverages could be derived from such objects if deemed feasible.

9.2.4. Modeling of Grouping Data and Operations

To capture as much of the semantics of such groupings - and hence ensure integrity at the highest possible level - schematron can be used. The following consistency constraints seem addressable:

  • require the same coverage type, range type, CRS on all items contained in the grouping;

  • require the same resolution (this information, though, is directly accessible only in CIS 1.1; in GMLCOV/CIS 1.0 it can only be computed through means beyond schematron); The final constraint - non-overlapping sub-coverages and no "holes" in super-coverage - can only be solved algorithmically, not through schematron - in particular, in presence of "contributing footprint" polygons as per EO-WCS.

In terms of operations, a Uniform Coverage Grouping needs to allow a GetCoverage request. The result might be a "consolidated" flat coverage reassembled from the sub-coverages, or a collection retaining those original or cropped sub-coverages selected by the GetCoverage subsetting request. Further, subset extraction is meaningful for obtaining particular sub- coverages; in EO-WCS, this is accomplished through the DescribeEOCoverageSet request type.

Note that CIS 1.1 allows any suitable container format (such as zip, SAFE, etc.), thereby making delivery of "packages" representing Uniform Coverage Groupings flexible and user-oriented.

9.3. General Grouping of Coverages

9.3.1. Concept

Generalizing the uniform grouping from above, coverages can be aggregated into some topical information collection without any constraints of the elements grouped, and without the need of them to form a single super-coverage.

For example, EO products are typically stored in single files, either using a special binary EO format like NetCDF or ENVISAT N1, a special EO container format like SAFE, e.g. Sentinel-2, or DIMAP, or a general container format like TAR or ZIP. Sometimes EO products are stored as multiple files, e.g., sets of Landsat-8 files.

Modeling such grouped data as a coverage and allow GetCoverage requests would conceptually break the coverage definition and would also overburden WCS, rendering it impractical. Thus we propose to follow and extend the approach already established in EO-WCS and enhance the concept of DatasetSeries to incorporate the additional requirements that have come up to grasp more application semantics:

  • constrain participating coverages in their types; for example, a collection representing a product may consist of several hyperspectral images forming a timeseries, plus one binary mask; this can be expressed, for example, via schematron;

  • restrict the range set, e.g., to particular bands; again, schematron can be used for this;

  • Further, the OpenSearch EO Extension imposes a restriction in that it supports only two levels of grouping. Translated into the DatasetSeries modeling this means that a DatasetSeries cannot contain a DatasetSeries containing DatasetSeries itself. This can again be expressed through Schematron.

9.3.2. Encoding and Grouping of Associated Data

We now address the encoding of multiple coverages, potentially representing an EO Product, in a package format like TAR or ZIP. Given the new operation GetEOCoverageSet the only point missing is the inclusion of metadata on package level.

Basically the EOMetadata element has been amended to be in the substitutionGroup of ows:AbstractMetaData and the choice is extended by references to ISO 19139 MD_Metadata, which can be substituted by ISO 19139-2 MI_Metadata, and ISO 19115-3 MD_Metadata. To recap, the already available options are EO-O&M, or EOP as it is referred to sometimes, or by reference as seen in the example below. A complete example is provided with the EO-WCS standard.

These choices leave the option to use the concept of Dataset Series for offering collections but also for EO Products. Although named Dataset Series technically speaking it is a heterogeneous grouping of coverages and/or Dataset Series and can thus be used for any other concept like an EO Product containing multiple coverages with different resolutions as well.

The example below shows a complete DatasetSeries element including a reference to further metadata.

<?xml version="1.0" encoding="UTF-8"?>
<wcseo:DatasetSeries xmlns:ows="http://www.opengis.net/ows/2.0" xmlns:gml="http://www.opengis.net/gml/3.2" xmlns:wcs="http://www.opengis.net/wcs/2.0" xmlns:wcseo="http://www.opengis.net/wcs/wcseo/1.1" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xsi="http://www.w3.org/2001/XMLSchemainstance" xsi:schemaLocation="http://www.opengis.net/wcs/wcseo/1.1 http://schemas.opengis.net/wcs/wcseo/1.1/wcsEOAll.xsd">
  <wcseo:DatasetSeriesId>someDatasetSeries1</wcseo:DatasetSeriesId>
  <eop:Footprint gml:id="footprint_someDatasetSeries1">
    <eop:multiExtentOf>
      <gml:MultiSurface gml:id="multisurface_someDatasetSeries1" srsName="EPSG:4326">
        <gml:surfaceMembers>
          <gml:Polygon gml:id="polygon_someDatasetSeries1">
            <gml:exterior>
              <gml:LinearRing>
                <gml:posList>43.516667 2.1025 43.381667 2.861667 42.862778 2.65 42.996389 1.896944 43.516667 2.1025</gml:posList>
              </gml:LinearRing>
              </gml:exterior>
            </gml:Polygon>
          </gml:surfaceMembers>
        </gml:MultiSurface>
    </eop:multiExtentOf>
  </eop:Footprint>
  <gml:TimePeriod gml:id="someDatasetSeries1_timeperiod">
    <gml:beginPosition>2008-03-13T00:00:00.000</gml:beginPosition>
    <gml:endPosition>2008-03-13T23:59:59.999</gml:endPosition>
  </gml:TimePeriod>
  <ows:Metadata>
    <wcseo:EOMetadata>
      <ows:Reference xlink:href="http://www.someCatalogue.org/eop-metadatafrom-someDatasetSeries1" xlink:role="http://standards.iso.org/iso/19115/-3/mdb/1.0" xlink:title="ISO 19115-3 Metadata" />
    </wcseo:EOMetadata>
  </ows:Metadata>
  <wcseo:rectifiedDataset>
    <wcs:CoverageId>someEOCoverage1</wcs:CoverageId>
  </wcseo:rectifiedDataset>
</wcseo:DatasetSeries>

Of course the mechanism of using Reference elements in Metadata elements can also be used for associated data.

We propose to further investigate if a GetEOCoverageRequest together with a mediaType of multipart/related is suitable to be used for data access to whole EO Products. In a first step this will be verified using general container formats as written above. The next step then is to investigate the suitability of this approach also for special EO container formats like SAFE and special binary EO formats like NetCDF or ENVISAT N1.

The first part of the multipart response would look like the example below but additionally include Reference elements to the associated data inside Metadata elements of the DatasetSeries element. Of course the second part of the multipart response needs to include all the referenced files.

<?xml version="1.0" encoding="UTF-8"?>
<wcseo:EOCoverageSet numberMatched="3" numberReturned="3" xmlns:ows="http://www.opengis.net/ows/2.0" xmlns:gml="http://www.opengis.net/gml/3.2" xmlns:gmlcov="http://www.opengis.net/ mlcov/1.0" xmlns:swe="http://www.opengis.net/swe/2.0" xmlns:wcs="http://www.opengis.net/wcs/2.0" xmlns:wcseo="http://www.opengis.net/wcs/wcseo/1.1" xmlns:eop="http://www.opengis.net/eop/2.1" xmlns:om="http://www.opengis.net/om/2.0" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.opengis.net/wcs/wcseo/1.1 http://schemas.opengis.net/wcs/wcseo/1.1/wcsEOAll.xsd">
  <wcseo:RectifiedDataset gml:id="someEOCoverage1">
    <gml:boundedBy>
    ...
    </gml:boundedBy>
    <gml:domainSet>
    ...
    </gml:domainSet>
    <gml:rangeSet>
      <gml:File>
        <gml:rangeParameters xlink:arcrole="fileReference" xlink:href="cid:coverage.meta4;someEOCoverage1.tif" xlink:role="http://www.opengis.net/spec/GMLCOV_geotiff-coverages/1.0/conf/geotiff-coverage" />
        <gml:fileReference>cid:coverage.meta4;someEOCoverage1.tif</gml:fileReference>
        <gml:fileStructure />
        <gml:mimeType>image/tiff</gml:mimeType>
      </gml:File>
    </gml:rangeSet>
    <gmlcov:rangeType>
    ...
    </gmlcov:rangeType>
    <gmlcov:metadata>
      <gmlcov:Extension>
        <wcseo:EOMetadata>
          <eop:EarthObservation gml:id="eop_someEOCoverage1">
          ...
          </eop:EarthObservation>
          <wcseo:lineage>
            <wcseo:referenceGetEOCoverageSet>
              <ows:Reference xlink:href="http://www.someWCS.org?SERVICE=WCS&amp;VERSION=2.0.1&amp;REQUEST=GetEOCoverageSet&amp;EOID=someDatasetSeries1&amp;PACKAGEFORMAT=application/metalink4+xml&amp;MEDIATYPE=multipart/related" />
            </wcseo:referenceGetEOCoverageSet>
            <gml:timePosition>2016-05-17T12:25:40Z</gml:timePosition>
          </wcseo:lineage>
        </wcseo:EOMetadata>
      </gmlcov:Extension>
    </gmlcov:metadata>
  </wcseo:RectifiedDataset>
  <wcseo:RectifiedDataset gml:id="someEOCoverage2">
    <gml:boundedBy>
    ...
    </gml:boundedBy>
    <gml:domainSet>
    ...
    </gml:domainSet>
    <gml:rangeSet>
      <gml:File>
        <gml:rangeParameters xlink:arcrole="fileReference" xlink:href="cid:coverage.meta4;someEOCoverage2.tif" xlink:role="http://www.opengis.net/spec/GMLCOV_geotiff-coverages/1.0/conf/geotiff-coverage" />
        <gml:fileReference>cid:coverage.meta4;someEOCoverage2.tif</gml:fileReference>
        <gml:fileStructure />
        <gml:mimeType>image/tiff</gml:mimeType>
        </gml:File>
    </gml:rangeSet>
    <gmlcov:rangeType>
    ...
    </gmlcov:rangeType>
    <gmlcov:metadata>
      <gmlcov:Extension>
        <wcseo:EOMetadata>
          <eop:EarthObservation gml:id="eop_someEOCoverage2">
          ...
          </eop:EarthObservation>
          <wcseo:lineage>
            <wcseo:referenceGetEOCoverageSet>
              <ows:Reference xlink:href="http://www.someWCS.org?SERVICE=WCS&amp;VERSION=2.0.1&amp;REQUEST=GetEOCoverageSet&amp;EOID=someDatasetSeries1&amp;PACKAGEFORMAT=application/metalink4+xml&amp;MEDIATYPE=multipart/related" />
            </wcseo:referenceGetEOCoverageSet>
            <gml:timePosition>2016-05-17T12:25:40Z</gml:timePosition>
          </wcseo:lineage>
        </wcseo:EOMetadata>
      </gmlcov:Extension>
    </gmlcov:metadata>
  </wcseo:RectifiedDataset>
  <wcseo:DatasetSeries>
    <wcseo:DatasetSeriesId>someDatasetSeries1</wcseo:DatasetSeriesId>
    <eop:Footprint gml:id="footprint_someDatasetSeries1">
    ...
    </eop:Footprint>
    <gml:TimePeriod gml:id="someDatasetSeries1_timeperiod">
    ...
    </gml:TimePeriod>
    <ows:Metadata>
      <wcseo:EOMetadata>
        <ows:Reference xlink:href="http://www.someCatalogue.org/eop-metadatafrom-someDatasetSeries1" xlink:role="http://standards.iso.org/iso/19115/-3/mdb/1.0" xlink:title="ISO 19115-3 Metadata" />
        <wcseo:lineage>
          <wcseo:referenceGetEOCoverageSet>
          <ows:Reference xlink:href="http://www.someWCS.org?SERVICE=WCS&amp;VERSION=2.0.1&amp;REQUEST=GetEOCoverageSet&amp;EOID=someDatasetSeries1&amp;PACKAGEFORMAT=application/metalink4+xml&amp;MEDIATYPE=multipart/related"/>
        </wcseo:referenceGetEOCoverageSet>
        <gml:timePosition>2016-05-17T12:25:40Z</gml:timePosition>
        </wcseo:lineage>
      </wcseo:EOMetadata>
    </ows:Metadata>
    <wcseo:rectifiedDataset>
      <wcs:CoverageId>someEOCoverage1</wcs:CoverageId>
    </wcseo:rectifiedDataset>
    <wcseo:rectifiedDataset>
      <wcs:CoverageId>someEOCoverage2</wcs:CoverageId>
    </wcseo:rectifiedDataset>
  </wcseo:DatasetSeries>
</wcseo:EOCoverageSet>

An additional consideration is to harmonize this proposal with EO-O&M as adopted by EO-WCS. EO-O&M is designed to define a catalog record for one EO product including links to various raster or vector features like measurements, browses, masks, etc.

9.4. Collection and Product Registration

So far, access to coverages and groupings has been discussed. However, with WCS-T Web-based maintenance of coverage offerings is possible, including insertion, update, and deletion of coverages. This functionality might get extended with maintenance operations on coverage collections.

Essentially, this would include creation and removal of collections, inclusion of coverages into an existing collection as well as excluding selected coverages, and maybe more.

Relevant existing approaches should be considered appropriately, such as the GeoServer REST API 2.0.

TODO

10. Condense Coverage Description Information

10.1. Overview

OpenSearch is the designated EVO-ODAS endorsed search service. Thus we propose to extend OpenSearch in a way to allow clients to specify the verbosity of the answer.

Below we draft the usage of a new parameter named view. Alternatively the suitability of the OpenSearch SRU (Search and Retrieval via URL) extension should be investigated.

Several allowed values are defined in that proposal ranging from full for everything to geotime for a very limited view only including id, name, bbox, start, and end.

Additionally, there is the idea of adding histogram like functionality i.e., requesting summary information for defined buckets like months.

It should be noted that there exists an alternative approach to searching which is based on XPath enabling traversal and subsetting of a server’s XML information hierarchy.

Although XPath looks like a promising approach there are some difficulties particularly from an implementation point of view. In general, an XML document can only be subsetted using XPath once it has been generated. This approach wouldn’t scale well on server implementations. Of course particular queries can be computed on the fly but to allow generic XPath queries is quite challenging.

Another issue is, that XPath returns subsets of XML documents without maintaining overlying hierarchy. While it is simple to retrieve a list of coverage IDs for certain search criteria it is difficult if not impossible to retrieve for the same list of coverages tailored coverage descriptions only containing ID, phenomenon time, and footprint.

Further challenges arise when the query is supposed to contain time or spatial subsetting.

OpenSearch and XPath are not competing, but complementary approaches: OpenSearch empowers users to do human-centric search through keywords. XPath, conversely, enables fine-grain drilling into the server’s information structure and, hence, is suitable in particular for machine-to-machine communication.

Both search types, therefore, are important for versatile coverage services. In EVO-ODAS, the OpenSearch avenue will be elaborated.

TODO

10.2. OpenSearch view parameter

10.2.1. Objective

This proposal adds support for different levels of verbosity in OpenSearch responses. Clients mainly need a complete and detailed view on the result set but for example to show data availability on a time slider only a limited view is needed. This limited view provides a great opportunity for performance optimization, in response generation time on the server, in response size and thus transfer time, and in response parsing time on the client.

The proposal adds a parameter named view to the OpenSearch URL template using the OpenSearch Parameter extension. It further defines several mandatory and optional options for predefined values for the new parameter including the definition of the content of response. Additionally it leaves room to add custom options as needed.

This shows an example of an Url element using the view parameter:

<Url xmlns:param="http://a9.com/-/spec/opensearch/extensions/parameters/1.0/"
     xmlns:eo="http://a9.com/-/opensearch/extensions/eo/1.0/"
     type="application/atom+xml"
     rel="collection"
     template="http://example.com/atom?q={searchTerms}&amp;view={eo:view}">
  <param:Parameter name="view"
                   value="{eo:view}"
                   title="Verbosity of the response. Default: full"
                   pattern="full|brief|geotime"
                   minimum="0">
    <param:Option value="full" label="Complete and detailed view."/>
    <param:Option value="brief" label="Brief view to get a quick impression."/>
    <param:Option value="geotime" label="View to show data availability on a time slider."/>
  </param:Parameter>
</Url>

10.2.2. view Parameter

The new view parameter reuses the namespace of the OGC® OpenSearch Extension for Earth Observation [OGC 13-026r8]. It is used as view={eo:view} in the template attribute of Url elements.

The following mandatory and optional option values are defined:

  • full - mandatory - Complete and detailed view.

  • brief - mandatory - Brief view to get a quick impression.

  • geotime - optional - View to show data availability on a time slider.

  • TODO

Note
Not all options have to necessarily be made available with each format. The geotime option for example might be available with JSON or CSV formatting but not with ATOM.
full

TODO: Use full EOP

brief

TODO: Check with CSW

geotime

Using this option returns the needed metadata to show data availability on a time slider. The needed metadata are identifier, name, bounding box or footprint in EPSG:4326, start time, and end time.

This is a response example in CSV format:

"identifier","name","bbox","starttime","endtime"
"1","Satellite image","(40,10,50,20)","2016-04-20T00:00:00Z","2016-04-20T23:59:59Z"
Custom options

TODO

11. WCS Masking Extension

11.1. Overview

We propose to extend the GetCoverage request with parameters to request a masking via a mask coverage or polygons e.g. given as GeoJSON or shapefile. The coverage of polygons can be given by reference or, if small enough, included directly in the request in case of polygons as WKT.

The response shall use a defined NoData value for areas outside of the mask.

This will be described first in the EO Data Access Best Practice at hand. Later on this might be promoted to an actual WCS extension.

TODO

12. Conclusions

This section summarizes intended use and benefits of EO-WCS 1.1.

Among others, this might mention that EO-WCS 1.0 has inspired coverage extensions, and it can be expected that EO-WCS 1.1 work will have a similar impact.

TODO

Annex A: Revision History

Date Release Editor Primary clauses modified Description

TBD

0.0.1

Stephan Meißl

All

Draft proposal from ESA project EVO-ODAS

Annex B: Bibliography

[1] OGC 09-153, WCS 2.0 Overview: Core and Extensions, version 1.0.0

[2] ISO 8601:2004(E) Data elements and interchange formats - Information interchange - Representation of dates and time

[3] IETF RFC 2616, Hypertext Transfer Protocol — HTTP/1.1. IETF, 1999

[4] www.epsg.org

[5] W3C Note 11, SOAP Messages with Attachments. W3C Note 11, 2000

[6] XML Schema Part 2: Datatypes Second Edition, W3C Recommendation, 2004

[7] OpenSearch Specification, 1.1, Draft 5

[8] OGC 09-025r2, OpenGIS Web Feature Service 2.0 Interface Standard - With Corrigendum, version 2.0.2