Multidimensional WMTS domain discovery
By GeoSolutions, 2016-05-24 draft.
Contact: Andrea Aime, andrea.aime@geo-solutions.it
Warning
|
This document is not an OGC specification |
Objective
This document describes a WMTS 1.0.0 extension adding multidimensional domain discovery operations/resources. The use cases under consideration are:
-
Datasets with large and irregular dimension domains which cannot be described by a simple
start/end/interval
syntax -
Datasets with multiple dimensions, such as time, run-time, elevation, some dimensions being related to each other (e.g. for a given time there is a small set of corresponding run-times)
-
Datasets scattered over both space and time (e.g., typical satellite collections) where not all possible combinations of space and time locate an actual data sample
While the current WMTS dimension support can report multiple dimensions, there is no way to discover the relationships between dimensions, moreover, large domains cannot be practically reported due to the requirement to enumerate all possible values in the capabilities document.
Note
|
While this document focuses on WMTS, the need to drill down into a N-dimensional domain to locate pockets of data is felt also while using WMS and WMTS, thus this extension tries to have limited WMTS dependencies to allow easy integration with the other two protocols as well. |
Existing OWS dimension support
Explicit multiple dimension support exists in both WMTS and WMS interfaces, based on slightly different semantics, while the EO-WCS extension supports a single time dimension as part of the coverage descriptions metadata.
None of the above protocols however provides a way to discover the structure of the dimension domain, nor provides good support for large scattered ones, but all would benefit from such support.
While this document focuses on WMTS, similar concepts and operations should be applicable to the other two protocols as well, with little conceptual and practical adaptations.
Existing WMTS dimension support
The latest official version of WMTS (Web Map Tile Service) is 1.0.0 [WMTS 1.0.0]. It includes a limited mechanism for dimension based queries, with
<Dimension> <ows:Identifier>dimension1</ows:Identifier> <ows:UOM>theUnit</ows:UOM> <ows:Title>...</ows:Title> <ows:Abstract>...</ows:Abstract> <Default>d1Default</Default> <Value>d1v1</Value> <Value>d1v2</Value> <Value>d1v3</Value> </Dimension>
<Dimension> <ows:Identifier>dimension2</ows:Identifier> <ows:UOM>theUnit</ows:UOM> <ows:Title>...</ows:Title> <ows:Abstract>...</ows:Abstract> <Default>d2Default</Default> <Value>d2v1</Value> <Value>d2v2</Value> <Value>d2v3</Value> </Dimension>
Specific values must be explicitly enumerated, implying the practical usage is limited to small domains, and the dimension is opaque to the client, which is going to use the dimension values as-is in requests, without any understanding of them.
Existing WMS dimension support
The latest official version of WMS (Web Map Service) is 1.3.0 [WMS 1.3.0]. It has a more-sophisticated dimension support than WMTS. An example declaration section might describe regular domains in a compact way by providing a start, end, and resolution:
<Dimension name="time" units="ISO8601" default="current">2008-01-15T00:00:00.000Z/2008-11-01T00:00:00.000Z/PT1H</Dimension> <Dimension name="run-time" units="ISO8601" default="current">2008-01-12T00:00:00.000Z/2008-10-28T00:00:00.000Z/PT1H</Dimension> <Dimension name="elevation" units="EPSG:5030" default="0">0/2000/100</Dimension>
This allows regular domains to be described in a compact notation, however one that
still fails to address discovery of the relationships between the domains.
For example, in the above example a 3 days weather forecast is run periodically to generate
temperature values at various heights in the atmosphere: it’s thus clear to the reader
there is a tight relationship between time and run-time, while a single time
is related to multiple run-times, the run-time values related to a time T
are to be found
in the interval [T - 3d,T]
.
A client unaware of such relationship will thus generate requests that match no actual data in the dataset.
Capabilities document changes
The starting point for a client trying to explore the structure of the multidimensional domain is the capabilities document. Services supporting this extension declare dimensions using either:
-
The full domain as usual, if the domain is small enough to practically be included in the capabilities document
-
A single value representing the full domain as "minValue--maxValue", if the domain is too large to be represented as a sequence of values in the capabilities document.
For example:
<Dimension> <ows:Identifier>dimension1</ows:Identifier> <ows:UOM>theUnit</ows:UOM> <ows:Title>...</ows:Title> <ows:Abstract>...</ows:Abstract> <Default>d1Min--d1Max</Default> <Value>d1Min--d1Max</Value> </Dimension>
<Dimension> <ows:Identifier>dimension2</ows:Identifier> <ows:UOM>theUnit</ows:UOM> <ows:Title>...</ows:Title> <ows:Abstract>...</ows:Abstract> <Default>d2v1</Default> <Value>d2v1</Value> <Value>d2v2</Value> <Value>d2v3</Value> </Dimension>
This approach will allow clients unaware of the dimension drilling extension to get their usual dimension support. When the range syntax is used in WMTS requests, the server is free to decide on a reasonable behavior, including:
-
Stack all data in the range to compose the output
-
Using a single default value contained in the range depending on the nature of the dimension (e.g., min, max, or current)
-
Evaluate the specified dimension values, considering those that are explicit and those that are implicit ranges, and locate a suitable list of dimension values actually matching an available dataset
Note
|
The full range of values has been used, as opposed to a static key as The range separator proposed is not |
The capabilities document of services implementing this extension will also declare two extra operations to discover the details of multiple dimensions domain (detailed description available in the following sections):
-
DescribeDomains, allowing to drill into the dimensions structure with a compact output representation
-
GetFeature, allowing to locate all the available dimension values combinations
A WMTS implementation using the procedure oriented architectural style declares the two new operations in the operations section of the capabilities document, a restful one will instead provide two extra url templates at the layer level.
Space as an element of dimension domain discovery
It is to be noted that, while the two dimensional space does not appear as an explicit Dimension
element in the capabilities document, it is nevertheless and important element of discovery, especially for scattered domains populated by satellite or aerial sources (as opposed to models, which instead tend to always consider the same area).
Each domain resource/operation will then accept a target range of values for each dimension (space included), and will return the restricted domain/values of the others as described below.
Specifically for WMTS, the representation of space is normally provided as a TopLeftCorner in the tile matrix set CRS, a resolution and number of tiles. For the sake of simplicity the extension will use a bounding box using the same syntax and semantics as the BBOX parameter in WMS 1.3 [WMS 1.3] instead. This won’t make WMTS clients and servers more complex, as on both sides there is already a need to convert between tile coordinates and world coordinates.
Note
|
The usage of BBOX also simplifies to integration of the extension with WMS, and to a more limited extent, with WCS (WCS 2.0 uses trims on single axis to limit the area of interest instead of a bounding box). |
Compact domain inspection
A new operation/resource is added to the WMTS protocol describing all the dimension domains in a compact document, along with the restricted bounding box of the two dimensional space intercepted by the request.
The domain description is delivered by a new DescribeDomains
operation in procedure oriented
architectural style, and a Domains
resource in resource oriented architectural style.
The DescribeDomains
operation accepts the following parameters:
Name | Optionality and use | Definition and format |
---|---|---|
"Service=WMTS" |
Mandatory |
Service type identifier |
"Request=DescribeDomains" |
Mandatory |
Operation name |
"Version=1.0.0" |
Mandatory |
Standard and schema version for this operation |
"Layer" |
Mandatory |
Layer identifier |
"TileMatrixSet" |
Mandatory |
Tile matrix set identifier |
"BBOX=minx,miny,maxx,maxy" |
Optional |
Bounding box corners (lower left, upper right) in CRS units. |
"DimensionIdentifier" |
Optional, at most one per dimension |
A range described as |
"Format" |
Optional, the default being |
The desired output format |
The following is a sample request assuming a Dimension
definition with an ows:Identifier
value of time
:
The Domains
resource is described by a URL template at the Layer
level and works in a similar fashion,
using --
as the interval separator in requests
URL template variable | Meaning | Possible values | Multiplicity |
---|---|---|---|
"TileMatrixSet" |
Tile matrix set identifier |
Identifier found at |
One (mandatory) |
"BBOX" |
Space restriction |
|
One (Mandatory) |
"./Dimension/ows:Identifier" |
Restriction for the given dowmain |
|
One for each dimension available (mandatory) |
The following are a sample template and a request assuming a Dimension
definition with an ows:Identifier
value of time
:
<ResourceURL format="text/xml" resourceType="Domains" template="http://server.com/ows/wmts/1.0.0/layer/default/{TileMatrixSet}/{BBOX}/{time}.xml"/>
http://server.com/ows/wmts/1.0.0/layer/default/CRS84/-30,10,20,40/2008-01-15T00:00:00.000Z--2008-11-01T00:00:00.000Z.xml
The response contains the residual space and domain of various dimensions. To accommodate competing needs of clarity and compactness, the residual domain can be expressed as a comma separate list of:
-
Regular distributions expressed as
Min/Max/Interval
, using the same syntax as WMS 1.3 -
Compact scattered domains represented as
Min/Max
, indicating that there is no regular structure betwen the two extremes -
Single values
A few examples:
-
A large scattered elevation domain too large to be represented by a full list can be described as
1.5/2436
-
An almost regular domain cut on missing data points can be represented as
1/100/1,110/200/1,215/500/1
-
When restrictions on the various domain axis make the domain small enough a scattered domain can be represented as a simple list, e.g.,
1,10,13,25,32
-
If the restrictions cause a domain to be completely void of data, an empty list will be returned
Note
|
The document is presented with XML bindings, for consistency with the other WMTS protocol requests. A namespace needs to be chosen, while a potential JSON presentation should be considered as well. |
A compact dimension domain description contains the following elements:
Element | Meaning | Possible values | Multiplicity |
---|---|---|---|
"ows:Identifier" |
The dimension name |
time,elevation,run-time,… |
One (mandatory) |
"Size" |
Number of elements left in the domain with the current restriction |
Non negative number |
One or zero (mandatory for Scattered only) |
"Domain" |
A description of residual dimension domain under the current restrictions |
A comma separate list of point values, regular ranges, and scattered ranges, or an empty value if no data is available under the current restrictions |
Mandatory |
The following document declares the dimension domains for an unrestricted request:
http://server.com/ows?Service=WMTS&Request=DescribeDomains&Version=1.0.0&Layer=Imagery&TileMatrixSet=CRS84
<Domains> <SpaceDomain> <BoundingBox CRS="urn:ogc:def:crs:OGC:1.3:CRS84" minx="-180" miny="-90" maxx="180" maxy="90"/> </SpaceDomain> <DimensionDomain> <ows:Identifier>time</ows:Identifier> <Domain>2008-01-15T00:00:00.000Z/2008-11-01T00:00:00.000Z/PT1H</Domain> </DimensionDomain> <DimensionDomain> <ows:Identifier>elevation</ows:Identifier> <Domain>0/5000</Domain> <Size>238</Sizez> </DimensionDomain> <DimensionDomain> <ows:Identifier>band</ows:Identifier> <Domain>COAST,B,G,R,NIR,SWIR1,SWIR2,PAN,CIRRUS,TIR1,TIR2</Domain> </DimensionDomain> </Domains>
A request restricting on the -30,10,20,40
bounding box might result in an elevation domain
compact enough to be expressed in enumerated mode:
http://server.com/ows?Service=WMTS&Request=DescribeDomains&Version=1.0.0&Layer=Imagery&TileMatrixSet=CRS84&BBOX=-30,10,20,40
<Domains> <SpaceDomain> <BoundingBox CRS="urn:ogc:def:crs:OGC:1.3:CRS84" minx="-30" miny="10" maxx="20" maxy="40"/> </SpaceDomain> <DimensionDomain> <ows:Identifier>time</ows:Identifier> <Domain>2008-05-00T10:30:00.000Z/2008-07-20T23:00:00.000Z/PT1H</Domain> </DimensionDomain> <DimensionDomain> <ows:Identifier>elevation</ows:Identifier> <Domain>1200,1300,1400,1500,1600,1700</Domain> </DimensionDomain> <DimensionDomain> <ows:Identifier>band</ows:Identifier> <Domain>COAST,B,G,R,NIR,SWIR1,SWIR2,PAN,CIRRUS,TIR1,TIR2</Domain> </DimensionDomain> </Domains>
A further restriction on the same bbox and an elevation value outside of the previous list would result in:
http://server.com/ows?Service=WMTS&Request=DescribeDomains&Version=1.0.0&Layer=Imagery&TileMatrixSet=CRS84&BBOX=-30,10,20,40&elevation=100
<Domains> <SpaceDomain> <BoundingBox CRS="urn:ogc:def:crs:OGC:1.3:CRS84" minx="-30" miny="10" maxx="20" maxy="40"/> </SpaceDomain> <DimensionDomain> <ows:Identifier>time</ows:Identifier> <Domain></Domain> </DimensionDomain> <DimensionDomain> <ows:Identifier>elevation</ows:Identifier> <Domain></Domain> </DimensionDomain> <DimensionDomain> <ows:Identifier>band</ows:Identifier> <Domain></Domain> </DimensionDomain> </Domains>
Note
|
As an alternative the space domain portion could be represented as a GML polygon in the tilematrixset CRS, allowing smart clients to avoid requesting tiles in empty areas. The extension may require the server to provide the bounding box and allow it to also provide a more precise polygon, clients can decide to use it or ignore it based on their sophistication. e.g.: <Domains> <SpaceDomain> <BoundingBox CRS="urn:ogc:def:crs:OGC:1.3:CRS84" minx="-30" miny="10" maxx="20" maxy="40"/> <DomainGeometry> <gml:MultiSurface srsName="urn:ogc:def:crs:OGC:1.3:CRS84" srsDimension="2"> <gml:surfaceMember> <gml:Polygon> <gml:exterior> <gml:LinearRing> <gml:posList>-30 20 10 40 20 10 -30 -20</gml:posList> </gml:LinearRing> </gml:exterior> </gml:Polygon> </gml:surfaceMember> </gml:MultiSurface> </DomainGeometry> </SpaceDomain> <DimensionDomain> <ows:Identifier>time</ows:Identifier> <Domain></Domain> </DimensionDomain> <DimensionDomain> <ows:Identifier>elevation</ows:Identifier> <Domain></Domain>f </DimensionDomain> <DimensionDomain> <ows:Identifier>band</ows:Identifier> <Domain>COAST,B,G,R,NIR,SWIR1,SWIR2,PAN,CIRRUS,TIR1,TIR2</Domain> </DimensionDomain> </Domains> Given the |
Histogram generation
Given a scattered domain description, a client might want to provide users a notion of the data distribution between the minimum and maximum value. The histogram divides the interval in regular buckets, and provides an item count for each bucket.
The distribution histogram is delivered by a new GetHistogram
operation in procedure oriented
architectural style, and a Histogram
resource in resource oriented architectural style.
The client is allowed to suggest a desired resolution for the buckets, the server can accept and use
the suggested value, or return an histogram with a lower resolution in the suggested value would result in
an exceedingly large response.
The GetHistogram
operation builds on top of the DescribeDomain
structure, adding parameters to
identify the histogram dimension, and the desired histogram resolution:
Name | Optionality and use | Definition and format |
---|---|---|
"Service=WMTS" |
Mandatory |
Service type identifier |
"Request=GetHistogram" |
Mandatory |
Operation name |
"Version=1.0.0" |
Mandatory |
Standard and schema version for this operation |
"Layer" |
Mandatory |
Layer identifier |
"TileMatrixSet" |
Mandatory |
Tile matrix set identifier |
"BBOX=minx,miny,maxx,maxy" |
Optional |
Bounding box corners (lower left, upper right) in CRS units. |
"DimensionIdentifier" |
Optional, at most one per dimension |
A range described as |
"Histogram" |
Required, one value |
Name of the dimension for which the histogram will be computed |
"Resolution" |
Optional |
Suggsted size of the histogram bucket. Cannot be provided for enumerated dimensions, will use the period sytanx for time (e.g. |
"Format" |
Optional, the default being |
The desired output format |
The following is a sample request assuming the Capabililites document contains a Dimension
definition with an ows:Identifier
value of time
:
The Histogram
resource is described by a URL template at the Layer
level and works in a similar fashion,
using --
as the interval separator in requests
URL template variable | Meaning | Possible values | Multiplicity |
---|---|---|---|
"TileMatrixSet" |
Tile matrix set identifier |
Identifier found at |
One (mandatory) |
"BBOX" |
Space restriction |
|
One (Mandatory) |
"./Dimension/ows:Identifier" |
Restriction for the given dowmain |
|
One for each dimension available (mandatory) |
"Histogram" |
Name of the dimension for which the histogram will be computed |
A dimension name as found in the capabilities document |
One (mandatory) |
"Resolution" |
Suggested size for the histogram bucket |
A period for time dimensions (e.g. |
One (mandatory) |
The following are a sample template and request assuming a Dimension
definition with an ows:Identifier
value of time
:
<ResourceURL format="text/xml" resourceType="Histogram" template="http://server.com/ows/wmts/1.0.0/layer/default/{TileMatrixSet}/{BBOX}/{time}/{dimension}/{resolution}/histogram.xml"/>
http://server.com/ows/wmts/1.0.0/layer/default/CRS84/-30,10,20,40/2008-01-15T00:00:00.000Z--2008-11-01T00:00:00.000Z/time/auto/histogram.xml
The response contains the distribution histogram for the specified dimension, under the specified restrictions.
Note
|
The document is presented with XML bindings, for consistency with the other WMTS protocol requests. A namespace needs to be chosen, while a potential JSON presentation should be considered as well. |
A histogram description contains the following elements:
Element | Meaning | Possible values | Multiplicity |
---|---|---|---|
"ows:Identifier" |
The dimension name |
time,elevation,run-time,… |
One (mandatory) |
"Domain" |
Describes the histogram domain as start, end and resolution. |
Start/End/Resolution |
Mandatory |
"Values" |
Lists the number of values found in each bucket |
A comma separate list of integer numbers, one count per bucket |
Mandatory |
In the following request the client requires a hourly histogram over a space of 11 months, the server considers the request excessive and returns a monthly histogram instead:
http://server.com/ows?Service=WMTS&Request=GetHistogram&Version=1.0.0&Layer=Imagery&TileMatrixSet=CRS84&histogram=time&resolution=PT1H
<Histogram> <ows:Identifier>time</ows:Identifier> <Domain>2008-01-01T00:00:00.000Z/2008-12-01T00:00:00.000Z/P1M</Domain> <Values>1,15,0,2,5,7,1,0,3,9,23</Value> </Histogram>
Detailed value combination inspection and description
Once the range of possible values has been suitably restricted, the client might need to to enumerate
the actual possible value combinations using a GetFeature
operation, which in a similar
way to WFS [WFS 2.0] GetFeature
returns a list of features along with dimension values using the same
formats as the feature info operation.
For this profile GML 3.1 shall be provided as a feature info format ("application/gml+xml; version=3.1")
a similar GeoJSON output should be considered as an option.
Note
|
Supporting this operation could be made optional, but it’s strongly recommended for domains that are scattered and/or having inter-dimension dependencies (e.g., even having enumerated values for all dimensions, not all possible combinations will select existing data). |
Each dimension shall be represented as an attribute of the feature, while the space component is encoded as a polygon/multipolygon, which can be as simple as a bounding box, or a full fledged footprint of an EO feature.
The GetFeature
operation accepts the following parameters:
Name | Optionality and use | Definition and format |
---|---|---|
"Service=WMTS" |
Mandatory |
Service type identifier |
"Request=GetFeature" |
Mandatory |
Operation name |
"Layer" |
Mandatory |
Layer identifier |
"BBOX=minx,miny,maxx,maxy" |
Optional |
Bounding box corners (lower left, upper right) in CRS units. |
"TileMatrixSet=tileMatrixSetId" |
Mandatory |
Tile matrix set identifiier |
"DimensionIdentifier=dimension" |
Optional, at most one per dimension |
A range described as |
"Format=application/gml+xml; version=3.1" |
Mandatory |
One of the formats declared as supported in the capabilities document |
The Features
resource is described by a URL template at the Layer
level and works in a similar fashion,
using --
as the interval separator in requests
URL template variable | Meaning | Possible values | Multiplicity |
---|---|---|---|
"TileMatrixSet" |
Tile matrix set identifier |
Identifier found at |
One (mandatory) |
"BBOX" |
Space restriction |
|
One (Mandatory) |
"./Dimension/ows:Identifier" |
Restriction for the given dimension |
|
One for each dimension available (mandatory) |
The encoded GML result contains an indication of the footprints and other dimension values
<?xml version="1.0" encoding="UTF-8"?> <wmts:FeatureCollection xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:gml="http://www.opengis.net/gml" xmlns:ogc="http://www.opengis.net/ogc" xmlns:wmts="http://www.opengis.net/wmts/1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" numberOfFeatures="1"> <gml:featureMembers> <wmts:feature gml:id="sample.1"> <wmts:footprint> <gml:MultiSurface srsName="urn:ogc:def:crs:OGC:1.3:CRS84" srsDimension="2"> <gml:surfaceMember> <gml:Polygon> <gml:exterior> <gml:LinearRing> <gml:posList>-10 0 -10 10 10 10 10 0 -10 0</gml:posList> </gml:LinearRing> </gml:exterior> </gml:Polygon> </gml:surfaceMember> </gml:MultiSurface> </wmts:footprint> <wmts:dimension name="time">2008-05-00T10:30:00.000Z</wmts:dimension> <wmts:dimension name="run-time">2008-02-00T10:30:00.000Z</wmts:dimension> <wmts:dimension name="elevation">1200</wmts:dimension> </wmts:feature> </gml:featureMembers> ... </wmts:FeatureCollection>
Note
|
The XML above places dimension names as attribute in order to allow usage of a simple, static XML schema to describe the GML collection, while at the same time avoiding the extra requirement of dimension names being valid QName. |
References
[WMS 1.3.0] OpenGIS Web Map Service (WMS) Implementation Specification, version 1.3.0, OGC document 06-042, 2006-03-15, http://portal.opengeospatial.org/files/?artifact_id=14416
[WMTS 1.0.0] OpenGIS Web Map Tile Service Implementation Standard, version 1.0.0, OGC document 07-057r7, 2010-04-06, http://portal.opengeospatial.org/files/?artifact_id=35326
[WFS 2.0.0] OGC® Web Feature Service 2.0 Interface Standard, version 2.0.2, OGC document 09-025r2, 20104-07-10, http://docs.opengeospatial.org/is/09-025r2/09-025r2.html