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.


 

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:

  1. Advanced clients that read the full WMTS ServiceMetadata document, including the TileMatrixSet definitions and are able to support any TileMatrixSet definition.
  2. 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.
  3. 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:

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:

“I have a WMTS 1.0.0 service. That service can be accessed with a standard WMTS client application at (http://mycompany.com/wmts). It is also compatible with the WMTS simple profile, with the following templates:

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:
WMTS services implementing this profile SHALL conform with WMTS 1.0.
Dependency: http://www.opengis.net/spec/wmts/1.0/req

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:
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

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
WMTS services implementing this profile SHALL support the WMTS 1.0 REST binding.

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
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).

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
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).

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
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"

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
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".

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
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.

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.

Table B.1 — Definition of the World Web Mercator TileMatrixSet
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).

Table B.2 — Definition of the World CRS84 TileMatrixSet
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:

Figure D.1 shows how we can use these templates to retrieve the following tiles and shows them together in an integrated client:

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

Several tiles coming from different mass market solutions are shown together.
Figure: D.1: Several tiles coming from different mass market solutions are shown together.

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

[3] www.opengeospatial.org/cite