i. Abstract
The Web Map Tile Service (WMTS) Simple profile defines restrictions that limit the flexibility in implementing a WMTS instance. Adding additional requirements has the goal of simplifying the creation of services and clients. By implementing this profile, clients can more easily combine data coming from different services including from other WMTS instances and even from some tile implementations that are not OGC WMTS based, such as some current distributions of OSM. In fact, most of these tiling services are implicitly following most of the WMTS requirements. Many current WMTS services that implement this profile will have to undergo some changes on how tiles are exposed, and a client that is compatible with WMTS 1.0 will be immediately compatible with this profile. The aim is to align the WMTS standard to other popular tile initiatives which are less flexible but widely adopted.
ii. Keywords
The following is a keyword to be used by search engines and document catalogues;
ogcdoc, ogc documents, tiling, WMTS
iii. Preface
This document is the result of design, implementation, and testing in the Open Geospatial Consortium (OGC) Interoperability Program Web Service (OWS) Testbed Phase 9 (OWS-9).
The Profile defined in this document is part of the effort to harmonize the WMTS standard with other popular initiatives that use very similar approaches including following elements of the WMTS standard to serve tiles.
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
- UAB-CREAF
iv. Submitters
All questions regarding this submission should be directed to the editor or the submitters:
Name | Representing | OGC member |
---|---|---|
Joan Masó | UAB-CREAF | Yes |
Scope
This OGC® Standard defines a simplified profile for WMTS services that limits the flexibility of the original WMTS standard. This profile defines a set of new requirements (restrictions). These are in addition to the predefined requirements of the complete WMTS standard [OGC 07-057r7[1]].
This OGC® Standard is applicable to any WMTS server that wants to expose a more common set of tiles compatible with some mass market tile distributions that do not claim to be WMTS compliant but in fact share elements of the WMTS requirements.
This WMTS Profile is defined to allow implementation of WMTS clients that do not implement all of elements of all the requirements as specified in the OGC WMTS standard (see above). This profile is expected to enhance interoperability between clients and servers and make the task of implementing client applications less onerous. In particular, we can classify WMTS clients in three categories:
- Advanced clients that read the full WMTS ServiceMetadata document, including the TileMatrixSet definitions and are able to support any TileMatrixSet definition.
- Simpler RESTful clients that assume a fix Web Mercator[2] TileMatrixSet (or a World CRS84 TileMatrixSet) and partially read the WMTS ServiceMetadata document for the purpose of determining the available layers and their tile URL templates.
- Very simple RESTful clients that assume a Web Mercator TileMatrixSet (or a World CRS84 TileMatrixSet), ignore the WMTS ServiceMetadata document entirely, and are simply provided with one or more tile URL templates as input.
The base WMTS 1.0 standard addresses the first of these categories while the WMTS Simple profile addresses the last two.
Conformance
This standard defines 1 conformance class: WMTS Simple Profile.
Requirement Class | Requirement Class URI |
---|---|
WMTS simple | http://www.opengis.net/spec/wmts/1.0/simple-profile |
Requirements for 1 standardization target types are considered:
- WMTS servers
Recommendations for clients are also given.
Conformance with this standard shall be checked using all the relevant tests specified in Annex A (normative) of this document. The framework, concepts, and methodology for testing, and the criteria to be achieved to claim conformance are specified in the OGC Compliance Testing Policies and Procedures and the OGC Compliance Testing web site[3].
All requirements-classes and conformance-classes described in this document are owned by the standard(s) identified.
Normative References
The following normative documents contain provisions that, through reference in this text, constitute provisions of this document. 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-121r3,
- OpenGIS® Web Services Common Specification, version 1.1.0 with Corrigendum 1 2006
- OGC 07-057r7,
- Web Map Tile Service (WMTS) Implementation Standard, version 1.0.0. 2010
Terms and Definitions
This document uses the terms defined in Sub-clause 5.3 of [OGC 06-121r8], 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 standard, the definitions specified in clause 4 of the OWS Common Implementation Specification [OGC 06-121r3] and Web Map Tile Service (WMTS) Implementation Standard, version 1.0.0 [OGC 07-057r7] apply.
Conventions
Abbreviated Terms
Most of the abbreviated terms listed in subclause 5.1 of the OWS Common Implementation Specification [OGC 06-121r3] and in subclause 4 of the Web Map Tile Service (WMTS) Implementation Standard, version 1.0.0 OGC [OGC 07-057r7] apply to this document, plus the following abbreviated terms:
- OSM
- Open Street Map
Relative URI
URIs given in this document for each requirement or conformance test URIs are relative paths to be appended to the root http://www.opengis.net/spec/wmts_simple/1.0/
WMTS Simple description and motivation
Motivation for this profile
This profile has two objectives: to facilitate the combination of layers coming from different WMTS services and to make tile client applications easier to implement by imposing a common TileMatrixSet.
One of the main difficulties of WMTS client implementations is positioning the tiles in the right place on the screen. The URL of the tile does not include any direct reference to the georeference of the tile (no bounding box). This is due to the original design of the WMTS, which makes the maximum effort to avoid a situation where a single tile has a variety of requests and thus making any cache mechanism less efficient. This issue has been addressed by avoiding the use of floating point numbers that, based on the implementation environment, could have several text translations as well as floating point inaccuracies.
In a general for a WMTS implementation the only way of knowing the extent of a tile expressed in CRS coordinates is to a-priori know the TileMatrixSet description for the layer to be rendered (e.g. by reading and parsing the ServiceMetadata section at the beginning of a session; xpath: /Capabilities/Contents/TileMatrixSet[ows:Identifier={TileMatrixSet}]/). Then, once a TileMatrix is selected, the corresponding TileMatrix definition (xpath: /Capabilities/Contents/TileMatrixSet[ows:Identifier={TileMatrixSet}]/TileMatrix[ows:Identifier={TileMatrix}]) can be interpreted to extract the TopLeftCorner, ScaleDenominator, TileWidth and TileHeight values. Then, by adding the TileRow and TileCol, the appropriate tile-request URLs is prepared with this knowledge, so the client application already knows (with the simple calculation presented in Annex H.2 of OGC 07-057r7) exactly what the bounding box is for each requested tile, and it can also easily calculate back the pixel location it should be placed at on the screen.
Note that if the client is combining layers coming from the same or different services, the procedure described above should be performed on each layer. In some cases, two WMTS layers will not share any common ScaleDenominator. Under these circumstances, interpolation of tile images on the client side is the only solution for a correct layer overlay. Raster interpolation can degrade the image quality, particularly when text information or textures were used to produce the tile. In the core WMTS standard, the WellKnownScaleSet concept was introduced to mitigate this problem, By recommending a short list of WellKnownScaleSets, the WMTS standard tries to increase the probability that a wide number of layers in WMTS servers use the same sets of ScaleDenominators. Nevertheless, even if they have the same ScaleDenominator and the same TileRow and TileCol values, tiles can have different bounding boxes depending on the TopLeftCorner value and the TileWidth and TileHeight. In theory, this only requires clients to include this factor in their calculations and shift tiles but in practice, some application fail to consider this correctly.
Reading the ServiceMetadata looking for URL templates
This profile targets simplified RESTful clients that assume a fix Web Mercator TileMatrixSet (or a World CRS84 TileMatrixSet) and partially read the WMTS ServiceMetadata document for the purpose of determining the available layers and their tile URL templates. By imposing a common tile framework, clients can use the URL templates and start requesting tiles by applying rules hardcoded into their implementations as a constant pattern. By doing so, clients know that all layers share the same set of scales (which can be used to present a common zoom dropdown list from a zoom bar). Then, just by knowing the TileMatrix identifier, the TileCol and the TileRow values of a tile, the client can immediately know the bounding box for a tile, without having to read the TileMatrixSet definitions included in the ServicesMetadata document nor having to maintain a different dynamic tile pattern for each layer.
Exposing the layer URL template
This profile also targets implementation of simple RESTful clients that assume a Web Mercator TileMatrixSet (or a World CRS84 TileMatrixSet), ignore the WMTS ServiceMetadata document entirely they are provided with tile-URL templates as inputs, with all but {TileMatrix}, {TileCol} and {TileRow} resolved. The tile URL templates include, as literals, the base URL of the server, the name of the desired layer, TileMatrixSet information, possible style information, the index ordering that the server expects and an indication of the desired file format. A layer in a WMTS server conformant to this simple profile can be advertised by email, a website or any other means by providing a text like this:
The ‘Oceans’ layer:
http://mycompany.com/wmts/1.0.0/tiles/oceans/default/smerc/{TileMatrix}/{TileCol}/{TileRow}.png
The ‘Transportation’ layer (Rand-McNally style):
http://mycompany.com/wmts/1.0.0/tiles/transportation/RandMcNally/smerc/{TileMatrix}/{TileCol}/{TileRow}.png”
Indirect benefits
By using a RESTful binding, the caching mechanisms can be more efficient by reducing the number of bindings that can access the same tile.
Additionally, since this profile requires a fixed TopLeftCorner that is valid for the whole world, changing the extent of a layer to cover more territory (a change in the TileMatrixLimits) will not end up in changing the tile indices so the tiles that had been cached are still valid.
By requiring ScaleDenominators related by powers of 2 and by forcing a single TopLeftCorner for all ScaleDenominators, both clients and servers conformal to this profile can benefit from the fact that a tile of a ScaleDenominator is divided in 4 tiles in the next ScaleDenominator. This makes preparation of tiles easier and allows clients to easily generate visual zoom transitions.
WMTS Simple requirement class
Requirements class simple-profile establishes how WMTS services and clients can follow the WMTS Simple Profile. The identifying URL is given by http://www.opengis.net/spec/wmts_simple/1.0/req/simple-profile.
General
A service that declare conformance to this document also adhere to the Web Map Tile Service (WMTS) Implementation Standard, version 1.0.0 [OGC 07-057r7].
Requirement 1 /req/simple-profile/wmts-1-0 | |
WMTS services implementing this profile SHALL conform with WMTS 1.0. | |
Dependency: | http://www.opengis.net/spec/wmts/1.0/req |
Profile declaration
Requirement 2 /req/simple-profile/wmts-profile-uri | |
The ServiceMetadata document of a WMTS service implementing this profile SHALL include one or both of the following URIs in the ows:Profile element of the ServiceIdentification within a ServiceMetadata document: http://www.opengis.net/spec/wmts-simple/1.0/conf/simple-profile http://www.opengis.net/spec/wmts-simple/1.0/conf/simple-profile/CRS84 |
A client that reads a ServiceMetadata document containing one of these declarations can assume that all the requirements in this profile are honoured by the server. E.g. Clients can assume that layers that expose a URL template of resourceType "simpleProfileTile" or "simpleProfileCRSTile" can be requested by supposing constant relation between TileCol, TileRow and the Bounding Box of its tiles.
Note that the existence of a ServiceMetadata document is still mandatory for a server honouring this profile even if clients cannot read it. Indeed, many elements in the ServiceMetadata document are constrained by this profile to fixed values that can be hardcoded in client implementations. As explained in subclause 6.2, some clients can use the ServiceMetadata document just to extract a list of URL templates. Other clients (see subclause 6.3) may already know the URL template of some layers (and e.g. extra dimension names and values) by other means rather than extracting them from the ServiceMetadata document.
As will be presented later, http://www.opengis.net/spec/wmts-simple/1.0/conf/simple-profile and http://www.opengis.net/spec/wmts-simple/1.0/conf/simple-profile/CRS84 are almost identical but implies support a different TileMatrixSet.
REST service binding
Requirement 3 /req/simple-profile/wmts-profile-rest | |
WMTS services implementing this profile SHALL support the WMTS 1.0 REST binding. |
This does not exclude the server to support other bindings but these can be ignored by clients that support only this WMTS Simple Profile.
Fixed URL template
Requirement 4 /req/simple-profile/wmts-profile-tile-url-template | |
When the URI used to declare conformance to the profile is http://www.opengis.net/spec/wmts-simple/1.0/conf/simple-profile, at least one layer in WMTS services implementing this profile SHALL have either at least one URL template of the resourceType "simpleProfileTile" for getting tiles back in image/png or image/jpeg format. Furthermore these URL templates only presents {TileMatrix}, {TileRow} and {TileCol} and extra dimensions as parameters (other parameters need to be already resolved as direct values or simply not present). |
Requirement 5 /req/simple-profile/wmts-profile-tile-url-template-crs84 | |
When the URI used to declare conformance to the profile is http://www.opengis.net/spec/wmts-simple/1.0/conf/simple-profile/CRS84, at least one layer in WMTS services implementing this profile SHALL have at least one a URL template of resourceType "simpleProfileCRS84Tile" for getting tiles back in image/png or image/jpeg format. Furthermore these URL templates only presents {TileMatrix}, {TileRow} and {TileCol} and extra dimensions as parameters (other parameters need to be already resolved as direct values or simply not present). |
Clients need to be able to parse and populate these URL templates to request tiles. In the ServiceMetadata document layer conformant to WMTS advertises URL templates like some of the following:
<ResourceURL format=“image/png” resourceType=“simpleProfileTile” template=“http://www.server.bob/path/layer1/WorldWebMercatorQuad/{TileMatrix}/{TileCol}/{TileRow}.png”/>
<ResourceURL format=“image/png” resourceType=“simpleProfileCRS84Tile” template=“http://www.server.bob/path/layer1/WorldCRS84Quad/{TileMatrix}/{TileCol}/{TileRow}.png”/>
…
Note that if you want the same tiles to be accessible for a base WMTS 1.0 client (that is not aware of the existence of this profile) using the RESTful binding, the WMTS service is ALSO forced to include another URL template with resourceType=”tile” (as required by OGC 07-057r7 WMTS 1.0), as follows:
<ResourceURL format=“image/png” resourceType=“tile” template=“http://www.server.bob/path/layer1/{style}/{TileMatrixSet}/{TileMatrix}/{TileCol}/{TileRow}.png”/>
NOTE 1 The ordering of {TileCol}/{TileRow} in the URL template examples here is the opposite of the ordering used in the OGC 07-057r7 WMTS 1.0 examples. The {TileCol}/{TileRow} ordering is becoming popular in other tile implementations such as current common distributions of OSM.
NOTE 2 We deliberately do not require any “WMTS” word in the URL template. This is done because in this profile we want to include some other implementations, such as OSM, which already follows these requirements and can be considered WMTS Simple in its current status.
Fixed TileMatrixSet definition and limits
Requirement 6 /req/simple-profile/wmts-profile-world-web-mercator | |
When the URI used to declare conformance to the profile is http://www.opengis.net/spec/wmts-simple/1.0/conf/simple-profile, WMTS services implementing this profile SHALL support a TileMatrixSet that conforms to the urn:ogc:def:wkss:OGC:1.0:GoogleMapsCompatible well-known scale set (as defined in OGC 07-057r7 Annex E.4), with TileMatrix identifiers being integer strings (with “0” meaning the world-level tile and increasing monotonically for each zoom level (i.e., “0”, “1”, “2”, …)), with a topLeftCorner coordinate of -20037508.3427892 20037508.3427892, and with TileWidth and TileHeight fixed to 256. This is the TileMatrixSet that is implicitly used by all URL templates of resource type “simpleProfileTile”. |
Clients need also to be able to work and show data in the TileMatrixSet urn:ogc:def:wkss:OGC:1.0:GoogleMapsCompatible
In other words, in the ServiceMetadata document, the TileMatrixSet definition will use some of the exact TileMatrix definitions listed in Annex B. You can use an arbitrary number of zoom levels.
Even if this TileMatrixSet is designed for representing the whole world, the Mercator projection cannot represent the poles correctly. If the server needs to represent the poles correctly, it needs to declare support to the profile http://www.opengis.net/spec/wmts-simple/1.0/conf/simple-profile/CRS84 (instead of http://www.opengis.net/spec/wmts-simple/1.0/conf/simple-profile) and follow the next requirement.
Requirement 7 /req/simple-profile/wmts-profile-world-crs84 | |
When the URI used to declare conformance to the profile is http://www.opengis.net/spec/wmts-simple/1.0/conf/simple-profile/CRS84, WMTS services implementing this profile SHALL support the TileMatrixSet that conforms to the urn:ogc:def:wkss:OGC:1.0:GoogleCRS84Quad well-known scale set (as defined in OGC 07-057r7 Annex E.3), with TileMatrix identifiers being integer strings (with “-1” meaning the world in a single tile with half of the lines blank, “0” meaning the world-level two tiles and increasing monotonically for each zoom level (i.e., “0”, “1”, “2”, …)), with a topLeftCorner coordinate of -180.0 90.0, and with TileWidth and TileHeight fixed to 256. This is the TileMatrixSet that is implicitly used by all URL templates of resource type “simpleProfileCSR84Tile”. |
In other words, in the ServiceMetadata document, the TileMatrixSet definition will use some of the exact TileMatrix definitions listed in Annex B. You can define an arbitrary number of zoom levels.
Requirement 8 /req/simple-profile/wmts-profile-tile-outside-limits | |
If a tile that is outside the TileMatrixLimits or in a non available TileMatrix level is requested a WMTS service implementing this profile SHALL respond with a blank tile or a HTTP 404, although returning a blank tile is recommended. |
A WMTS client implementing this profile that does not read the ServiceMetadata (and therefore does not know the TileMatrixLimits or the available TileMatrix levels) need to support and deal with an HTTP 404 error when a tile is requested outside the TileMatrixLimits or for a non available TileMatrix level.
Annex : Comformance Class Abstract Test Suite (Normative)
A GMLJP2 implementation must satisfy the following system characteristics to be conformant with this specification.
A.1 Conformance class: WMTS Simple
The OGC URI identifier of this conformance class is:
http://www.opengis.net/spec/wmts/1.0/simple-profile/conf/simple-profile
Tests identifiers below are relative to http://www.opengis.net/spec/wmts/1.0/simple-profile.
A.1.1 Follow WMTS 1.0
Test id: |
/conf/simple-profile/wmts-1-0 |
Test Purpose: |
Req 1 req/simple-profile/wmts-1-0: |
Test method: |
Validate the requirements of WMTS 1.0 Test passes if instances are valid according to the WMTS 1.0 standard (OGC 07-057r7). |
A.1.2 Profile declaration
Test id: |
/conf/simple-profile/wmts-profile-uri |
Test Purpose: |
Req 2 req/simple-profile/wmts-profile-uri: |
Test method: |
Validate that the profile is declared in the ServiceMetadata document. Test passes if the ServiceMetadata document contains an element /Capabilities/ows:ServiceIdentification/ows:Profile with at least one of this two values: http://www.opengis.net/spec/wmts-simple/1.0/conf/simple-profile or http://www.opengis.net/spec/wmts-simple/1.0/conf/simple-profile/CRS84. This can be validated by the schematron in Annex C. |
A.1.3 REST service binding support
Test id: |
/conf/simple-profile/wmts-profile-rest |
Test Purpose: |
Req 3 req/simple-profile/wmts-profile-rest |
Test method: |
Validate the requirements of WMTS 1.0 for a REST binding Test passes if server instances are valid according to the WMTS 1.0 standard (OGC 07-057r7) section 10. Declaration of support to REST can be validated by the schematron in Annex C. |
A.1.4 Fixed tile URL template
Test id: |
/conf/simple-profile/wmts-profile-tile-url-template |
Test Purpose: |
Req 4 req/simple-profile/wmts-profile-tile-url-template |
Test method: |
Validate that layers has a URL template following this rule. Test passes if the server declares conformity to http://www.opengis.net/spec/wmts-simple/1.0/conf/simple-profile and if at least one layer exposes a URL template of resourceType "simpleProfileTile” AND if all URL template of resourceType "simpleProfileTile" have the parameters: {TileMatrix}, {TileCol} and {TileRow} and extra dimensions but does not have {style} or {TileMatrixSet} AND if the mime type of the URL template is image/png or image/jpeg. This requirement can be validated by the schematron in Annex C. |
Test id: |
/conf/simple-profile/wmts-profile-tile-url-template-crs84 |
Test Purpose: |
Req 5 req/simple-profile/wmts-profile-tile-url-template-crs84 |
Test method: |
Validate that layers has a URL template following this rule. Test passes if the server declares conformity to http://www.opengis.net/spec/wmts-simple/1.0/conf/simple-profile/CRS84 and if at least one layer exposes a URL template of resourceType "simpleProfileCRS84Tile” AND if all URL template of resourceType "simpleProfileCRS84Tile" have the parameters: {TileMatrix}, {TileCol} and {TileRow} and extra dimensions but does not have {style} or {TileMatrixSet} AND if the mime type of the URL template is image/png or image/jpeg. This requirement can be validated by the schematron in Annex C. |
A.1.5 Fixed TileMatrixSet definition World Web Mercator.
Test id: |
/conf/simple-profile/wmts-profile-world-spherical-mercator |
Test Purpose: |
Req 6 req/simple-profile/wmts-profile-world-web-mercator |
Test method: |
Validate layers are available in the fixed World Web Mercator TileMatrixSet. Test passes if a TileMatrixSet is defined in the ServiceMetadata as indicated in Annex B. This can be validated by the schematron in Annex C only if the TileMatrixSet has the "WorldWebMercatorQuad” id. |
A.1.6 Fixed TileMatrixSet definition CRS84
Test id: |
/conf/simple-profile/wmts-profile-world-crs84 |
Test Purpose: |
Req 7 req/simple-profile/wmts-profile-world-crs84 |
Test method: |
Validate layers are available in the fixed CRS84 TileMatrixSet. Test passes if a TileMatrixSet is defined in the ServiceMetadata as indicated in Annex B. This can be validated by the schematron in Annex C only if the TileMatrixSet has the "WorldCRS84Quad” or “"InspireCRS84Quad” id. |
A.1.7 Tiles outside the limits
Test id: |
/conf/simple-profile/wmts-profile-world-crs84 |
Test Purpose: |
Req 8 req/simple-profile/wmts-profile-tile-outside-limits |
Test method: |
Validate support for blank tiles and HTTP 404 responses. Test passes when the server receives requests for tiles that are outside the TileMatrixLimits or correspond to an unknown TileMatrix name and responds either blank tile or a HTTP 404 respond. |
Annex : TileMatrixSet definition (Normative)
This Annex includes the normative definitions for the two TileMatrixSets that will be included in the ServiceMetadata document when it is required.
B.1 World Web Mercator TileMatrixSet definition.
Following requirement req/simple-profile/wmts-profile-world-web-mercator, the ServiceMetadata document will include the exact definition of the TileMatrixSet expect that the ows:Title and the ows:Identifier can be personalized, not all TileMatrix elements need to be included and including other TileMatrices for more detailed scales is possible if they follow the same pattern.
<TileMatrixSet>
<ows:Title>Google Maps Compatible for the World</ows:Title>
<ows:Identifier>WorldWebMercatorQuad</ows:Identifier>
<ows:BoundingBox crs=“urn:ogc:def:crs:EPSG::3857”>
<ows:LowerCorner>-20037508.3427892 -20037508.3427892</ows:LowerCorner>
<ows:UpperCorner>20037508.3427892 20037508.3427892</ows:UpperCorner>
</ows:BoundingBox>
<ows:SupportedCRS>
urn:ogc:def:crs:EPSG::3857
</ows:SupportedCRS>
<WellKnownScaleSet>
urn:ogc:def:wkss:OGC:1.0:GoogleMapsCompatible
</WellKnownScaleSet>
<TileMatrix>
<ows:Identifier>0</ows:Identifier>
<ScaleDenominator>559082264.0287178</ScaleDenominator>
<TopLeftCorner>
-20037508.3427892 20037508.3427892
</TopLeftCorner>
<TileWidth>256</TileWidth>
<TileHeight>256</TileHeight>
<MatrixWidth>1</MatrixWidth>
<MatrixHeight>1</MatrixHeight>
</TileMatrix>
<TileMatrix>
<ows:Identifier>1</ows:Identifier>
<ScaleDenominator>279541132.0143589</ScaleDenominator>
<TopLeftCorner>
-20037508.3427892 20037508.3427892
</TopLeftCorner>
<TileWidth>256</TileWidth>
<TileHeight>256</TileHeight>
<MatrixWidth>2</MatrixWidth>
<MatrixHeight>2</MatrixHeight>
</TileMatrix>
<TileMatrix>
<ows:Identifier>2</ows:Identifier>
<ScaleDenominator>139770566.0071794</ScaleDenominator>
<TopLeftCorner>
-20037508.3427892 20037508.3427892
</TopLeftCorner>
<TileWidth>256</TileWidth>
<TileHeight>256</TileHeight>
<MatrixWidth>4</MatrixWidth>
<MatrixHeight>4</MatrixHeight>
</TileMatrix>
<TileMatrix>
<ows:Identifier>3</ows:Identifier>
<ScaleDenominator>69885283.00358972</ScaleDenominator>
<TopLeftCorner>
-20037508.3427892 20037508.3427892
</TopLeftCorner>
<TileWidth>256</TileWidth>
<TileHeight>256</TileHeight>
<MatrixWidth>8</MatrixWidth>
<MatrixHeight>8</MatrixHeight>
</TileMatrix>
<TileMatrix>
<ows:Identifier>4</ows:Identifier>
<ScaleDenominator>34942641.50179486</ScaleDenominator>
<TopLeftCorner>
-20037508.3427892 20037508.3427892
</TopLeftCorner>
<TileWidth>256</TileWidth>
<TileHeight>256</TileHeight>
<MatrixWidth>16</MatrixWidth>
<MatrixHeight>16</MatrixHeight>
</TileMatrix>
<TileMatrix>
<ows:Identifier>5</ows:Identifier>
<ScaleDenominator>17471320.75089743</ScaleDenominator>
<TopLeftCorner>
-20037508.3427892 20037508.3427892
</TopLeftCorner>
<TileWidth>256</TileWidth>
<TileHeight>256</TileHeight>
<MatrixWidth>32</MatrixWidth>
<MatrixHeight>32</MatrixHeight>
</TileMatrix>
<TileMatrix>
<ows:Identifier>6</ows:Identifier>
<ScaleDenominator>8735660.375448715</ScaleDenominator>
<TopLeftCorner>
-20037508.3427892 20037508.3427892
</TopLeftCorner>
<TileWidth>256</TileWidth>
<TileHeight>256</TileHeight>
<MatrixWidth>64</MatrixWidth>
<MatrixHeight>64</MatrixHeight>
</TileMatrix>
<TileMatrix>
<ows:Identifier>7</ows:Identifier>
<ScaleDenominator>4367830.187724357</ScaleDenominator>
<TopLeftCorner>
-20037508.3427892 20037508.3427892
</TopLeftCorner>
<TileWidth>256</TileWidth>
<TileHeight>256</TileHeight>
<MatrixWidth>128</MatrixWidth>
<MatrixHeight>128</MatrixHeight>
</TileMatrix>
<TileMatrix>
<ows:Identifier>8</ows:Identifier>
<ScaleDenominator>2183915.093862179</ScaleDenominator>
<TopLeftCorner>
-20037508.3427892 20037508.3427892
</TopLeftCorner>
<TileWidth>256</TileWidth>
<TileHeight>256</TileHeight>
<MatrixWidth>256</MatrixWidth>
<MatrixHeight>256</MatrixHeight>
</TileMatrix>
<TileMatrix>
<ows:Identifier>9</ows:Identifier>
<ScaleDenominator>1091957.546931089</ScaleDenominator>
<TopLeftCorner>
-20037508.3427892 20037508.3427892
</TopLeftCorner>
<TileWidth>256</TileWidth>
<TileHeight>256</TileHeight>
<MatrixWidth>512</MatrixWidth>
<MatrixHeight>512</MatrixHeight>
</TileMatrix>
<TileMatrix>
<ows:Identifier>10</ows:Identifier>
<ScaleDenominator>545978.7734655447</ScaleDenominator>
<TopLeftCorner>
-20037508.3427892 20037508.3427892
</TopLeftCorner>
<TileWidth>256</TileWidth>
<TileHeight>256</TileHeight>
<MatrixWidth>1024</MatrixWidth>
<MatrixHeight>1024</MatrixHeight>
</TileMatrix>
<TileMatrix>
<ows:Identifier>11</ows:Identifier>
<ScaleDenominator>272989.3867327723</ScaleDenominator>
<TopLeftCorner>
-20037508.3427892 20037508.3427892
</TopLeftCorner>
<TileWidth>256</TileWidth>
<TileHeight>256</TileHeight>
<MatrixWidth>2048</MatrixWidth>
<MatrixHeight>2048</MatrixHeight>
</TileMatrix>
<TileMatrix>
<ows:Identifier>12</ows:Identifier>
<ScaleDenominator>136494.6933663862</ScaleDenominator>
<TopLeftCorner>
-20037508.3427892 20037508.3427892
</TopLeftCorner>
<TileWidth>256</TileWidth>
<TileHeight>256</TileHeight>
<MatrixWidth>4096</MatrixWidth>
<MatrixHeight>4096</MatrixHeight>
</TileMatrix>
<TileMatrix>
<ows:Identifier>13</ows:Identifier>
<ScaleDenominator>68247.34668319309</ScaleDenominator>
<TopLeftCorner>
-20037508.3427892 20037508.3427892
</TopLeftCorner>
<TileWidth>256</TileWidth>
<TileHeight>256</TileHeight>
<MatrixWidth>8192</MatrixWidth>
<MatrixHeight>8192</MatrixHeight>
</TileMatrix>
<TileMatrix>
<ows:Identifier>14</ows:Identifier>
<ScaleDenominator>34123.67334159654</ScaleDenominator>
<TopLeftCorner>
-20037508.3427892 20037508.3427892
</TopLeftCorner>
<TileWidth>256</TileWidth>
<TileHeight>256</TileHeight>
<MatrixWidth>16384</MatrixWidth>
<MatrixHeight>16384</MatrixHeight>
</TileMatrix>
<TileMatrix>
<ows:Identifier>15</ows:Identifier>
<ScaleDenominator>17061.83667079827</ScaleDenominator>
<TopLeftCorner>
-20037508.3427892 20037508.3427892
</TopLeftCorner>
<TileWidth>256</TileWidth>
<TileHeight>256</TileHeight>
<MatrixWidth>32768</MatrixWidth>
<MatrixHeight>32768</MatrixHeight>
</TileMatrix>
<TileMatrix>
<ows:Identifier>16</ows:Identifier>
<ScaleDenominator>8530.918335399136</ScaleDenominator>
<TopLeftCorner>
-20037508.3427892 20037508.3427892
</TopLeftCorner>
<TileWidth>256</TileWidth>
<TileHeight>256</TileHeight>
<MatrixWidth>65536</MatrixWidth>
<MatrixHeight>65536</MatrixHeight>
</TileMatrix>
<TileMatrix>
<ows:Identifier>17</ows:Identifier>
<ScaleDenominator>4265.459167699568</ScaleDenominator>
<TopLeftCorner>
-20037508.3427892 20037508.3427892
</TopLeftCorner>
<TileWidth>256</TileWidth>
<TileHeight>256</TileHeight>
<MatrixWidth>131072</MatrixWidth>
<MatrixHeight>131072</MatrixHeight>
</TileMatrix>
<TileMatrix>
<ows:Identifier>18</ows:Identifier>
<ScaleDenominator>2132.729583849784</ScaleDenominator>
<TopLeftCorner>
-20037508.3427892 20037508.3427892
</TopLeftCorner>
<TileWidth>256</TileWidth>
<TileHeight>256</TileHeight>
<MatrixWidth>262114</MatrixWidth>
<MatrixHeight>262114</MatrixHeight>
</TileMatrix>
</TileMatrixSet>
You can define an arbitrary number of zoom levels. Here, 19 zoom levels are illustrated but resolutions up to 24 are currently available in some mass market services.
CRS: urn:ogc:def:crs:EPSG:6.18:3:3857 WGS 84 / Pseudo-Mercator BBOX LowerCorner: -20037508.3427892 -20037508.3427892 BBOX UpperCorner: 20037508.3427892 20037508.3427892 WellKnownScaleSet: urn:ogc:def:wkss:OGC:1.0:GoogleMapsCompatible TopLeftCorner: -20037508.3427892 20037508.3427892 TileWidth: 256 TileHeight: 256 |
||||
---|---|---|---|---|
Zoom level id | Scale Denominator | Pixel Size (m) | Matrix Width | Matrix Height |
0 | 559082264.0287178 | 156543.0339280410 | 1 | 1 |
1 | 279541132.0143589 | 78271.51696402048 | 2 | 2 |
2 | 139770566.0071794 | 39135.75848201023 | 4 | 4 |
3 | 69885283.00358972 | 19567.87924100512 | 8 | 8 |
4 | 34942641.50179486 | 9783.939620502561 | 16 | 16 |
5 | 17471320.75089743 | 4891.969810251280 | 32 | 32 |
6 | 8735660.375448715 | 2445.984905125640 | 64 | 64 |
7 | 4367830.187724357 | 1222.992452562820 | 128 | 128 |
8 | 2183915.093862179 | 611.4962262814100 | 256 | 256 |
9 | 1091957.546931089 | 305.7481131407048 | 512 | 512 |
10 | 545978.7734655447 | 152.8740565703525 | 1024 | 1024 |
11 | 272989.3867327723 | 76.43702828517624 | 2048 | 2048 |
12 | 136494.6933663862 | 38.21851414258813 | 4096 | 4096 |
13 | 68247.34668319309 | 19.10925707129406 | 8192 | 8192 |
14 | 34123.67334159654 | 9.554628535647032 | 16384 | 16384 |
15 | 17061.83667079827 | 4.777314267823516 | 32768 | 32768 |
16 | 8530.918335399136 | 2.388657133911758 | 65536 | 65536 |
17 | 4265.459167699568 | 1.194328566955879 | 131072 | 131072 |
18 | 2132.729583849784 | 0.5971642834779395 | 262144 | 262144 |
B.2 World CRS84 TileMatrixSet definition.
Following requirement req/simple-profile/wmts-profile-world-crs84, when being conformance to the profile http://www.opengis.net/spec/wmts-simple/1.0/conf/simple-profile/CRS84, the ServiceMetadata document will include the exact definition of the TileMatrixSet except that the ows:Title and the ows:Identifier can be personalized, not all TileMatrix elements need to be included and including other TileMatrices for more detailed scales is possible if they follow the same pattern.
<TileMatrixSet>
<ows:Title>CRS84 for the World</ows:Title>
<ows:Identifier>WorldCRS84Quad</ows:Identifier>
<ows:BoundingBox crs=“urn:ogc:def:crs:OGC:1.3:CRS84”>
<ows:LowerCorner>-180 -90</ows:LowerCorner>
<ows:UpperCorner>180 90</ows:UpperCorner>
</ows:BoundingBox>
<ows:SupportedCRS>
urn:ogc:def:crs:OGC:1.3:CRS84
</ows:SupportedCRS>
<WellKnownScaleSet>
urn:ogc:def:wkss:OGC:1.0:GoogleCRS84Quad
</WellKnownScaleSet>
<TileMatrix>
<ows:Identifier>-1</ows:Identifier>
<ScaleDenominator>559082264.0287178</ScaleDenominator>
<TopLeftCorner>-180 90</TopLeftCorner>
<TileWidth>256</TileWidth>
<TileHeight>256</TileHeight>
<MatrixWidth>1</MatrixWidth>
<MatrixHeight>1</MatrixHeight>
</TileMatrix>
<TileMatrix>
<ows:Identifier>0</ows:Identifier>
<ScaleDenominator>279541132.0143589</ScaleDenominator>
<TopLeftCorner>-180 90</TopLeftCorner>
<TileWidth>256</TileWidth>
<TileHeight>256</TileHeight>
<MatrixWidth>2</MatrixWidth>
<MatrixHeight>1</MatrixHeight>
</TileMatrix>
<TileMatrix>
<ows:Identifier>1</ows:Identifier>
<ScaleDenominator>139770566.0071794</ScaleDenominator>
<TopLeftCorner>-180 90</TopLeftCorner>
<TileWidth>256</TileWidth>
<TileHeight>256</TileHeight>
<MatrixWidth>4</MatrixWidth>
<MatrixHeight>2</MatrixHeight>
</TileMatrix>
<TileMatrix>
<ows:Identifier>2</ows:Identifier>
<ScaleDenominator>69885283.00358972</ScaleDenominator>
<TopLeftCorner>-180 90</TopLeftCorner>
<TileWidth>256</TileWidth>
<TileHeight>256</TileHeight>
<MatrixWidth>8</MatrixWidth>
<MatrixHeight>4</MatrixHeight>
</TileMatrix>
<TileMatrix>
<ows:Identifier>3</ows:Identifier>
<ScaleDenominator>34942641.50179486</ScaleDenominator>
<TopLeftCorner>-180 90</TopLeftCorner>
<TileWidth>256</TileWidth>
<TileHeight>256</TileHeight>
<MatrixWidth>16</MatrixWidth>
<MatrixHeight>8</MatrixHeight>
</TileMatrix>
<TileMatrix>
<ows:Identifier>4</ows:Identifier>
<ScaleDenominator>17471320.75089743</ScaleDenominator>
<TopLeftCorner>-180 90</TopLeftCorner>
<TileWidth>256</TileWidth>
<TileHeight>256</TileHeight>
<MatrixWidth>32</MatrixWidth>
<MatrixHeight>16</MatrixHeight>
</TileMatrix>
<TileMatrix>
<ows:Identifier>5</ows:Identifier>
<ScaleDenominator>8735660.375448715</ScaleDenominator>
<TopLeftCorner>-180 90</TopLeftCorner>
<TileWidth>256</TileWidth>
<TileHeight>256</TileHeight>
<MatrixWidth>64</MatrixWidth>
<MatrixHeight>32</MatrixHeight>
</TileMatrix>
<TileMatrix>
<ows:Identifier>6</ows:Identifier>
<ScaleDenominator>4367830.187724357</ScaleDenominator>
<TopLeftCorner>-180 90</TopLeftCorner>
<TileWidth>256</TileWidth>
<TileHeight>256</TileHeight>
<MatrixWidth>128</MatrixWidth>
<MatrixHeight>64</MatrixHeight>
</TileMatrix>
<TileMatrix>
<ows:Identifier>7</ows:Identifier>
<ScaleDenominator>2183915.093862179</ScaleDenominator>
<TopLeftCorner>-180 90</TopLeftCorner>
<TileWidth>256</TileWidth>
<TileHeight>256</TileHeight>
<MatrixWidth>256</MatrixWidth>
<MatrixHeight>128</MatrixHeight>
</TileMatrix>
<TileMatrix>
<ows:Identifier>8</ows:Identifier>
<ScaleDenominator>1091957.546931089</ScaleDenominator>
<TopLeftCorner>-180 90</TopLeftCorner>
<TileWidth>256</TileWidth>
<TileHeight>256</TileHeight>
<MatrixWidth>512</MatrixWidth>
<MatrixHeight>256</MatrixHeight>
</TileMatrix>
<TileMatrix>
<ows:Identifier>9</ows:Identifier>
<ScaleDenominator>545978.7734655447</ScaleDenominator>
<TopLeftCorner>-180 90</TopLeftCorner>
<TileWidth>256</TileWidth>
<TileHeight>256</TileHeight>
<MatrixWidth>1024</MatrixWidth>
<MatrixHeight>512</MatrixHeight>
</TileMatrix>
<TileMatrix>
<ows:Identifier>10</ows:Identifier>
<ScaleDenominator>272989.3867327723</ScaleDenominator>
<TopLeftCorner>-180 90</TopLeftCorner>
<TileWidth>256</TileWidth>
<TileHeight>256</TileHeight>
<MatrixWidth>2048</MatrixWidth>
<MatrixHeight>1024</MatrixHeight>
</TileMatrix>
<TileMatrix>
<ows:Identifier>11</ows:Identifier>
<ScaleDenominator>136494.6933663862</ScaleDenominator>
<TopLeftCorner>-180 90</TopLeftCorner>
<TileWidth>256</TileWidth>
<TileHeight>256</TileHeight>
<MatrixWidth>4096</MatrixWidth>
<MatrixHeight>2048</MatrixHeight>
</TileMatrix>
<TileMatrix>
<ows:Identifier>12</ows:Identifier>
<ScaleDenominator>68247.34668319309</ScaleDenominator>
<TopLeftCorner>-180 90</TopLeftCorner>
<TileWidth>256</TileWidth>
<TileHeight>256</TileHeight>
<MatrixWidth>8192</MatrixWidth>
<MatrixHeight>4096</MatrixHeight>
</TileMatrix>
<TileMatrix>
<ows:Identifier>13</ows:Identifier>
<ScaleDenominator>34123.67334159654</ScaleDenominator>
<TopLeftCorner>-180 90</TopLeftCorner>
<TileWidth>256</TileWidth>
<TileHeight>256</TileHeight>
<MatrixWidth>16384</MatrixWidth>
<MatrixHeight>8192</MatrixHeight>
</TileMatrix>
<TileMatrix>
<ows:Identifier>14</ows:Identifier>
<ScaleDenominator>17061.83667079827</ScaleDenominator>
<TopLeftCorner>-180 90</TopLeftCorner>
<TileWidth>256</TileWidth>
<TileHeight>256</TileHeight>
<MatrixWidth>32768</MatrixWidth>
<MatrixHeight>16384</MatrixHeight>
</TileMatrix>
<TileMatrix>
<ows:Identifier>15</ows:Identifier>
<ScaleDenominator>8530.918335399136</ScaleDenominator>
<TopLeftCorner>-180 90</TopLeftCorner>
<TileWidth>256</TileWidth>
<TileHeight>256</TileHeight>
<MatrixWidth>65536</MatrixWidth>
<MatrixHeight>32768</MatrixHeight>
</TileMatrix>
<TileMatrix>
<ows:Identifier>16</ows:Identifier>
<ScaleDenominator>4265.459167699568</ScaleDenominator>
<TopLeftCorner>-180 90</TopLeftCorner>
<TileWidth>256</TileWidth>
<TileHeight>256</TileHeight>
<MatrixWidth>131072</MatrixWidth>
<MatrixHeight>65536</MatrixHeight>
</TileMatrix>
<TileMatrix>
<ows:Identifier>17</ows:Identifier>
<ScaleDenominator>2132.729583849784</ScaleDenominator>
<TopLeftCorner>-180 90</TopLeftCorner>
<TileWidth>256</TileWidth>
<TileHeight>256</TileHeight>
<MatrixWidth>262144</MatrixWidth>
<MatrixHeight>131072</MatrixHeight>
</TileMatrix>
</TileMatrixSet>
You can define an arbitrary number of zoom levels and do not include all the ones defined here. Here, 19 zoom levels are illustrated.
NOTE: The zoom level identifiers in this TileMatrixSet does not correspond to the same scales values than in annex B.1. In this TileMatrixSet, the TileMatrix with identifier “-1” has only one tile with the last 128 lines left blank. For that reason, many implementers does not want to offer this level (including the INSPIRE technical guidance) and prefer to start with a TileMatrix that represents the world with just 2 tiles (one for the negative longitudes and one for the positive longitudes).
NOTE for INSPIRE: The Technical Guidance for the implementation of INSPIRE View Services defines a TileMatrixSet called InspireCRS84Quad that is identical to this one except that the TileMatrix with identifier “-1” (Note that the Annex E.3 OGC 07-057r7 does not define any TileMatrix identifier) has been removed. The InspireCRS84Quad TileMatrixSet as defined in INSPIRE technical guidance is fully compatible with the TileMatrixSet defined here due to this specification do not require any TileMatrixSet name and requirement req/simple-profile/wmts-profile-tile-outside-limits gives freedom in the number of TileMatrix present in each implementation (consequently, to remove the first one). Also note that the current version of the INSPIRE Technical Guidance cited in the Bibliography Annex could accidentally generate confusion because it is comparing a GoogleCRS84Quad (that is a well know scale set name) with the InspireCRS84Quad (that is a TileMatrixSet definition that does not link to any WKSS).
CRS: urn:ogc:def:crs:OGC:1.3:CRS84 CRS84 BBOX LowerCorner: -180 -90 BBOX UpperCorner: 180 90 WellKnownScaleSet: urn:ogc:def:wkss:OGC:1.0:GoogleCRS84Quad TopLeftCorner: -180 90 TileWidth: 256 TileHeight: 256 |
||||
---|---|---|---|---|
Zoom level id | Scale Denominator | Pixel Size (degrees) | Matrix Width | Matrix Height |
-1 | 559082264.0287178 | 1.40625000000000 | 1 | 1 |
0 | 279541132.0143589 | 0.703125000000000 | 2 | 1 |
1 | 139770566.0071794 | 0.351562500000000 | 4 | 2 |
2 | 69885283.00358972 | 0.175781250000000 | 8 | 4 |
3 | 34942641.50179486 | 8.78906250000000 10-2 | 16 | 8 |
4 | 17471320.75089743 | 4.39453125000000 10-2 | 32 | 16 |
5 | 8735660.375448715 | 2.19726562500000 10-2 | 64 | 32 |
6 | 4367830.187724357 | 1.09863281250000 10-2 | 128 | 64 |
7 | 2183915.093862179 | 5.49316406250000 10-3 | 256 | 128 |
8 | 1091957.546931089 | 2.74658203125000 10-3 | 512 | 256 |
9 | 545978.7734655447 | 1.37329101562500 10-3 | 1024 | 512 |
10 | 272989.3867327723 | 6.86645507812500 10-4 | 2048 | 1024 |
11 | 136494.6933663862 | 3.43322753906250 10-4 | 4096 | 2048 |
12 | 68247.34668319309 | 1.71661376953125 10-4 | 8192 | 4096 |
13 | 34123.67334159654 | 8.58306884765625 10-5 | 16384 | 8192 |
14 | 17061.83667079827 | 4.29153442382812 10-5 | 32768 | 16384 |
15 | 8530.918335399136 | 2.14576721191406 10-5 | 65536 | 32768 |
16 | 4265.459167699568 | 1.07288360595703 10-5 | 131072 | 65536 |
17 | 2132.729583849784 | 5.36441802978516 10-6 | 262144 | 131072 |
Annex : XML Schema Documents (Informative)
In addition to this document, this standard includes an informative XML Schematron Document and some examples. These XML Schema Documents are bundled in a zip file with the present document. After OGC acceptance of a version 1.0.0 of this standard, these XML Documents will also be posted online at the URL http://schemas.opengis.net/wmts/1.0/profiles/wmts-simple/. In the event of a discrepancy between the bundled and online versions of the XML Documents, the online files SHALL be considered authoritative.
This XML Schematron Document is named:
wmtsSimpleGetCapabilities.sch
In addition, a WMTS service shall validate using the right XML Schema Documents mentioned in the WMTS 1.0 standard 07-057r7 and available at the URL http://schemas.opengis.net/wmts/1.0 that also includes OWS Common schemas.
Also, complete examples can be found on the zip file and on the portal. Some fragments of these examples are shown throughout this document.
Annex : Examples (Informative)
As stated in the Abstract of this document, WMTS simple has the aim to make the creation of services and clients simpler, by allowing combining data coming from different services including some WMTS and some tile implementations that do not claim to be WMTS (e.g some current distributions of OSM), but, in fact, they are implicitly following most of the WMTS requirements. This section provides an example on how common mass market solutions implicitly follow this profile by using Google-Mercator CRS, a common topLeftCorner, the same set of TileMatrices and a fix URL template.
D.1 URL template examples in current services.
Currently, the following services are implicitly or explicitly using the same TileMatrixSet that conforms to the following URL templates:
- http://a.tile.openstreetmap.org/{TileMatrix}/{TileCol}/{TileRow}.png
- http://mt1.google.com/vt/hl=en&z={TileMatrix}&y={TileRow}&x={TileCol}
- http://www.ogc.uab.cat/SITiled/GeoEye_Haiti_M/GeoEye/WorldSphericalMercator/{TileMatrix}/{TileCol}/{TileRow}.jpg
- http://otile1.mqcdn.com/tiles/1.0.0/map/{TileMatrix}/{TileCol}/{TileRow}.png
- http://tile.opencyclemap.org/cycle/{TileMatrix}/{TileCol}/{TileRow}.png
- http://maptile.maps.svc.ovi.com/maptiler/maptile/newest/normal.day/15/{TileCol}/{TileRow}/256/png8
Figure D.1 shows how we can use these templates to retrieve the following tiles and shows them together in an integrated client:
- http://a.tile.openstreetmap.org/15/9798/14664.png
- http://mt1.google.com/vt/hl=en&z=15&y=14664&x=9799
- http://www.ogc.uab.cat/SITiled/GeoEye_Haiti_M/GeoEye/WorldSphericalMercator/15/9798/14665.jpg
- http://otile1.mqcdn.com/tiles/1.0.0/map/15//9800/14664.png
- http://tile.opencyclemap.org/cycle/15/9800/14665.png
- http://maptile.maps.svc.ovi.com/maptiler/maptile/newest/normal.day/15/9800/14665/256/png8
The figure also adds a Virtual Earth tile to illustrate that even if the tile indexing, that they use, is different, they also use the same TileMatrixSet, http://ecn.t0.tiles.virtualearth.net/tiles/a032211203002113.jpeg?g=854
D.2 A Service Metadata document for a current OSM service.
The example reproduced here and provided in the folder: http://schemas.opengis.net/wmts/1.0/profiles/wmts-simple/examples illustrates that an implementation of a OSM tile distribution service is conformant to this profile and by extension to WMTS 1.0 conformance (using the RESTful binding only) by providing this ServiceMetadata document:
<?xml version=“1.0” encoding=“UTF-8”?>
<Capabilities xmlns="http://www.opengis.net/wmts/1.0"
xmlns:ows="http://www.opengis.net/ows/1.1"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.opengis.net/wmts/1.0
http://schemas.opengis.net/wmts/1.0/wmtsGetCapabilities_response.xsd" version="1.0.0">
<ows:ServiceIdentification>
<ows:Title>OpenStreetMap example Web Map Tile Service</ows:Title>
<ows:Keywords>
<ows:Keyword>World</ows:Keyword>
<ows:Keyword>Global</ows:Keyword>
<ows:Keyword>Streets</ows:Keyword>
</ows:Keywords>
<ows:ServiceType>OGC WMTS</ows:ServiceType>
<ows:ServiceTypeVersion>1.0.0</ows:ServiceTypeVersion>
<ows:Profile>http://www.opengis.net/spec/wmts-simple/1.0/conf/simple-profile</ows:Profile>
<ows:Fees>none</ows:Fees>
<ows:AccessConstraints>none</ows:AccessConstraints>
</ows:ServiceIdentification>
<ows:ServiceProvider>
<ows:ProviderName>OSM</ows:ProviderName>
<ows:ProviderSite xlink:href="http://wiki.openstreetmap.org"/>
<ows:ServiceContact/>
</ows:ServiceProvider>
<Contents>
<Layer>
<ows:Title>Open Street Map</ows:Title>
<ows:WGS84BoundingBox>
<ows:LowerCorner>-180 -90</ows:LowerCorner>
<ows:UpperCorner>180 90</ows:UpperCorner>
</ows:WGS84BoundingBox>
<ows:Identifier/>
<ows:BoundingBox>
<ows:LowerCorner>-20037508.3427892 -20037508.3427892</ows:LowerCorner>
<ows:UpperCorner>-20037508.3427892 20037508.3427892</ows:UpperCorner>
</ows:BoundingBox>
<Style isDefault="true">
<ows:Title>default</ows:Title>
<ows:Identifier/>
</Style>
<Format>image/png</Format>
<TileMatrixSetLink>
<TileMatrixSet>WorldWebMercatorQuad</TileMatrixSet>
</TileMatrixSetLink>
<ResourceURL format="image/png" resourceType="simpleProfileTile" template="http://tile.openstreetmap.org/{TileMatrix}/{TileCol}/{TileRow}.png"/>
<ResourceURL format="image/png" resourceType="tile" template="http://tile.openstreetmap.org/{TileMatrix}/{TileCol}/{TileRow}.png"/>
</Layer>
<TileMatrixSet>
<ows:Title>Google Maps Compatible for the World</ows:Title>
<ows:Identifier>WorldWebMercatorQuad</ows:Identifier>
<ows:BoundingBox crs="urn:ogc:def:crs:EPSG::3857">
<ows:LowerCorner>-20037508.3427892 -20037508.3427892</ows:LowerCorner>
<ows:UpperCorner>20037508.3427892 20037508.3427892</ows:UpperCorner>
</ows:BoundingBox>
<ows:SupportedCRS>
urn:ogc:def:crs:EPSG::3857
</ows:SupportedCRS>
<WellKnownScaleSet>urn:ogc:def:wkss:OGC:1.0:GoogleMapsCompatible
</WellKnownScaleSet>
<TileMatrix>
<ows:Identifier>0</ows:Identifier>
<ScaleDenominator>559082264.0287178</ScaleDenominator>
<TopLeftCorner>-20037508.3427892 20037508.3427892</TopLeftCorner>
<TileWidth>256</TileWidth>
<TileHeight>256</TileHeight>
<MatrixWidth>1</MatrixWidth>
<MatrixHeight>1</MatrixHeight>
</TileMatrix>
<TileMatrix>
<ows:Identifier>1</ows:Identifier>
<ScaleDenominator>279541132.0143589</ScaleDenominator>
<TopLeftCorner>-20037508.3427892 20037508.3427892</TopLeftCorner>
<TileWidth>256</TileWidth>
<TileHeight>256</TileHeight>
<MatrixWidth>2</MatrixWidth>
<MatrixHeight>2</MatrixHeight>
</TileMatrix>
<TileMatrix>
<ows:Identifier>2</ows:Identifier>
<ScaleDenominator>139770566.0071794</ScaleDenominator>
<TopLeftCorner>-20037508.3427892 20037508.3427892</TopLeftCorner>
<TileWidth>256</TileWidth>
<TileHeight>256</TileHeight>
<MatrixWidth>4</MatrixWidth>
<MatrixHeight>4</MatrixHeight>
</TileMatrix>
<TileMatrix>
<ows:Identifier>3</ows:Identifier>
<ScaleDenominator>69885283.00358972</ScaleDenominator>
<TopLeftCorner>-20037508.3427892 20037508.3427892</TopLeftCorner>
<TileWidth>256</TileWidth>
<TileHeight>256</TileHeight>
<MatrixWidth>8</MatrixWidth>
<MatrixHeight>8</MatrixHeight>
</TileMatrix>
<TileMatrix>
<ows:Identifier>4</ows:Identifier>
<ScaleDenominator>34942641.50179486</ScaleDenominator>
<TopLeftCorner>-20037508.3427892 20037508.3427892</TopLeftCorner>
<TileWidth>256</TileWidth>
<TileHeight>256</TileHeight>
<MatrixWidth>16</MatrixWidth>
<MatrixHeight>16</MatrixHeight>
</TileMatrix>
<TileMatrix>
<ows:Identifier>5</ows:Identifier>
<ScaleDenominator>17471320.75089743</ScaleDenominator>
<TopLeftCorner>-20037508.3427892 20037508.3427892</TopLeftCorner>
<TileWidth>256</TileWidth>
<TileHeight>256</TileHeight>
<MatrixWidth>32</MatrixWidth>
<MatrixHeight>32</MatrixHeight>
</TileMatrix>
<TileMatrix>
<ows:Identifier>6</ows:Identifier>
<ScaleDenominator>8735660.375448715</ScaleDenominator>
<TopLeftCorner>-20037508.3427892 20037508.3427892</TopLeftCorner>
<TileWidth>256</TileWidth>
<TileHeight>256</TileHeight>
<MatrixWidth>64</MatrixWidth>
<MatrixHeight>64</MatrixHeight>
</TileMatrix>
<TileMatrix>
<ows:Identifier>7</ows:Identifier>
<ScaleDenominator>4367830.187724357</ScaleDenominator>
<TopLeftCorner>-20037508.3427892 20037508.3427892</TopLeftCorner>
<TileWidth>256</TileWidth>
<TileHeight>256</TileHeight>
<MatrixWidth>128</MatrixWidth>
<MatrixHeight>128</MatrixHeight>
</TileMatrix>
<TileMatrix>
<ows:Identifier>8</ows:Identifier>
<ScaleDenominator>2183915.093862179</ScaleDenominator>
<TopLeftCorner>-20037508.3427892 20037508.3427892</TopLeftCorner>
<TileWidth>256</TileWidth>
<TileHeight>256</TileHeight>
<MatrixWidth>256</MatrixWidth>
<MatrixHeight>256</MatrixHeight>
</TileMatrix>
<TileMatrix>
<ows:Identifier>9</ows:Identifier>
<ScaleDenominator>1091957.546931089</ScaleDenominator>
<TopLeftCorner>-20037508.3427892 20037508.3427892</TopLeftCorner>
<TileWidth>256</TileWidth>
<TileHeight>256</TileHeight>
<MatrixWidth>512</MatrixWidth>
<MatrixHeight>512</MatrixHeight>
</TileMatrix>
<TileMatrix>
<ows:Identifier>10</ows:Identifier>
<ScaleDenominator>545978.7734655447</ScaleDenominator>
<TopLeftCorner>-20037508.3427892 20037508.3427892</TopLeftCorner>
<TileWidth>256</TileWidth>
<TileHeight>256</TileHeight>
<MatrixWidth>1024</MatrixWidth>
<MatrixHeight>1024</MatrixHeight>
</TileMatrix>
<TileMatrix>
<ows:Identifier>11</ows:Identifier>
<ScaleDenominator>272989.3867327723</ScaleDenominator>
<TopLeftCorner>-20037508.3427892 20037508.3427892</TopLeftCorner>
<TileWidth>256</TileWidth>
<TileHeight>256</TileHeight>
<MatrixWidth>2048</MatrixWidth>
<MatrixHeight>2048</MatrixHeight>
</TileMatrix>
<TileMatrix>
<ows:Identifier>12</ows:Identifier>
<ScaleDenominator>136494.6933663862</ScaleDenominator>
<TopLeftCorner>-20037508.3427892 20037508.3427892</TopLeftCorner>
<TileWidth>256</TileWidth>
<TileHeight>256</TileHeight>
<MatrixWidth>4096</MatrixWidth>
<MatrixHeight>4096</MatrixHeight>
</TileMatrix>
<TileMatrix>
<ows:Identifier>13</ows:Identifier>
<ScaleDenominator>68247.34668319309</ScaleDenominator>
<TopLeftCorner>-20037508.3427892 20037508.3427892</TopLeftCorner>
<TileWidth>256</TileWidth>
<TileHeight>256</TileHeight>
<MatrixWidth>8192</MatrixWidth>
<MatrixHeight>8192</MatrixHeight>
</TileMatrix>
<TileMatrix>
<ows:Identifier>14</ows:Identifier>
<ScaleDenominator>34123.67334159654</ScaleDenominator>
<TopLeftCorner>-20037508.3427892 20037508.3427892</TopLeftCorner>
<TileWidth>256</TileWidth>
<TileHeight>256</TileHeight>
<MatrixWidth>16384</MatrixWidth>
<MatrixHeight>16384</MatrixHeight>
</TileMatrix>
<TileMatrix>
<ows:Identifier>15</ows:Identifier>
<ScaleDenominator>17061.83667079827</ScaleDenominator>
<TopLeftCorner>-20037508.3427892 20037508.3427892</TopLeftCorner>
<TileWidth>256</TileWidth>
<TileHeight>256</TileHeight>
<MatrixWidth>32768</MatrixWidth>
<MatrixHeight>32768</MatrixHeight>
</TileMatrix>
<TileMatrix>
<ows:Identifier>16</ows:Identifier>
<ScaleDenominator>8530.918335399136</ScaleDenominator>
<TopLeftCorner>-20037508.3427892 20037508.3427892</TopLeftCorner>
<TileWidth>256</TileWidth>
<TileHeight>256</TileHeight>
<MatrixWidth>65536</MatrixWidth>
<MatrixHeight>65536</MatrixHeight>
</TileMatrix>
<TileMatrix>
<ows:Identifier>17</ows:Identifier>
<ScaleDenominator>4265.459167699568</ScaleDenominator>
<TopLeftCorner>-20037508.3427892 20037508.3427892</TopLeftCorner>
<TileWidth>256</TileWidth>
<TileHeight>256</TileHeight>
<MatrixWidth>131072</MatrixWidth>
<MatrixHeight>131072</MatrixHeight>
</TileMatrix>
<TileMatrix>
<ows:Identifier>18</ows:Identifier>
<ScaleDenominator>2132.729583849784</ScaleDenominator>
<TopLeftCorner>-20037508.3427892 20037508.3427892</TopLeftCorner>
<TileWidth>256</TileWidth>
<TileHeight>256</TileHeight>
<MatrixWidth>262144</MatrixWidth>
<MatrixHeight>262144</MatrixHeight>
</TileMatrix>
</TileMatrixSet>
</Contents>
<ServiceMetadataURL xlink:href="http://tile.openstreetmap.org/1.0.0/WMTSCapabilities.xml"/>
</Capabilities>
D.3 Sharing URL templates by email.
Note that subclause 6.3 emphasizes on the possibility that a client can ignore the Service Metadata document of a WMTS service conformant to this profile. Service discovery is made possible by communicating the URL template of a layer in the WMTS service directly by any communication means such as Facebook, Twitter, or an email. The following email fragment illustrates how this can be done.
Hey,
I have a WMTS 1.0.0 service up at “http://mycompany.com/wmts”.
It can be accessed with a standard WMTS client application.
It’s also compatible with the WMTS-Simple profile, with the
following URL templates:
“Oceans” layer:
http://mycompany.com/wmts/1.0.0/tiles/oceans/default/smerc/{TileMatrix}/{TileCol}/{TileRow}.png
The “Transportation” layer (Rand-McNally style):
http://mycompany.com/wmts/1.0.0/tiles/transportation/RandMcNally/smerc/{TileMatrix}/{TileCol}/{TileRow}.png
Annex : Revision history
Date | Release | Author | Paragraph modified | Description |
---|---|---|---|---|
17-10-2012 | 1 | Joan Masó | all | Done based on debates on OWS9 twiki. |
05-01-2013 | 2 | Joan Masó | all | Some conclusions of the WMS.SWG discussions adopted. |
15-08-2013 | 4 | Joan Masó | all | Candidate for internal WMS.SWG vote. |
26-10-2014 | 7 | Joan Masó and Keith Pomakis | all | All CRs received in the RFC period have been considered. The need for resourceType "simpleProfileTile" and "simpleProfileCRS84Tile" is introduced |
08-11-2014 | 11 | Joan Masó | 7.5 and Annex B.2 | Support for InspireCRS84Quad is introduced. |
09-06-2015 | Version 1.0 | Carl Reed | Numerous | Prepare for publication |
Annex : Bibliography
- [1] OGC 12-157, OWS-9 Engineering Report - OWS Innovations - Map Tiling Methods Harmonization, Joan Masó, 2013.
- [2] OGC 09-006, OWS-6 DSS Engineering Report - SOAP/XML and REST in WMTS, Keith Pomakis, 2009
- [3] Technical Guidance for the implementation of INSPIRE View Services, IOC Task Force for Network Services, 2011-11-07, Version 3.1
Footnotes
[1] http://www.opengeospatial.org/standards/wmts
[2] Also known as Spherical Mercator and WGS 84 Web Mercator