Preface

This document defines the OGC API — Tiles — Part 1: Core Standard. A Web API conforming to this Standard can serve tiles of spatially referenced data or maps with predefined content, extent, and resolution. Suggested additions, changes and comments on this standard are welcome and encouraged. Such suggestions may be submitted using the issues log on the GitHub repository: https://github.com/opengeospatial/ogcapi-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.

Abstract

The OGC API — Tiles Standard defines building blocks for implementing Web APIs that support the retrieval of tiled geospatial information. A Web API is an application programming interface for either a web server or a web browser [Wikipedia, 2022].

The OGC suite of Web API standards is an extensible framework for building HTTP based services that can be accessed in different applications on different platforms such as the Web, desktop, mobile, etc. The OGC API — Tiles Standard specifies how different forms/types of geospatial resources are supported, such as tiles of vector features ("vector tiles"), coverages, and maps (or imagery). Although OGC API - Tiles can be used independently, the building blocks can be combined with other OGC API Standards for additional capabilities or increased interoperability for specific types of data. The OGC API — Tiles Standard references the OGC Two-Dimensional Tile Matrix Set (TMS) and Tile Set Metadata Standard [OGC 17-083r4]. That Standard defines logical models and encodings for specifying tile matrix sets and describing tile sets. A tile matrix set is a tiling scheme that enables an application to partition and index space based on a set of regular grids defined for multiple scales in a Coordinate Reference System (CRS).

The OGC API - Tiles Standard is an alternative to the OGC’s Web Map Tile Service (WMTS) Standard. Instead of a fixed Web interface, OGC API — Tiles focuses on simple reusable REST API building blocks which can be described using the OpenAPI specification. Whereas WMTS focused on map tiles, the OGC API — Tiles Standard is designed to support any form of tiled data.

Submitters

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

Name

Affiliation

Joan Masó

Universitat Autònoma de Barcelona (CREAF)

Chuck Heazel

Heazel Tech

Jeff Harrison

US Army Geospatial Center (AGC)

Jérôme Jacovella-St-Louis

Ecere Corporation

Satish Sankaran

Esri

Scope

The OGC API — Tiles Standard specifies the behavior of Web APIs that provide access to tiles of one or more geospatial data resources (collections) that the Web API offers. This Standard defines how to discover which resources offered by the Web API can be retrieved as tiles, get metadata about the available tile sets (including according to which tile matrix set each tile set is partitioned and the limits of that tile set within a common potentially global tile matrix set) and how to request a tile. This Standard is sometimes referred to as the Tiles API.

The core conformance class is defined in a way that could be easily included in a web API, even if that API does not conform to the OGC API - Common Standard. A web API can combine some requirements classes of this OGC API Standard with those of other OGC API Standards (including OGC API - Common) to extend the scope of the Web API by adding functionality.

Conformance

The OGC API — Tiles Standard defines multiple requirements classes and their associated conformance classes.

The standardization targets of all conformance classes are "Web APIs".

The Tiles API requirements classes are summarized below and in more detail in subsequent clauses.

Requirements classes defining resources

The Core Requirements Class specifies requirements that all implementation instances of the Tiles API must support if claiming conformance with this Standard. The Core class defines how to retrieve individual tiles by building a URI from three variables corresponding to the tile matrix, tile row and tile column for that tile.

Table 1. Overview of resource and common direct links that correspond to tiles defined in the Core Requirements Class
Resource name Common path

Tile

…​/{tileMatrix}/{tileRow}/{tileCol}

Note
The path template is recommended, but not prescribed. Ordering the parameters differently within the URI is allowed.

The TileSet Requirements Class defines a mechanism for describing a tileset using a specific tile matrix set and a way of obtaining a templated link to the individual tiles.

Table 2. Overview of resources and common direct links that correspond to the tileset
Resource name Common path

Tileset

…​/tiles/{tileMatrixSetId}

Tile

…​/tiles/{tileMatrixSetId}/{tileMatrix}/{tileRow}/{tileCol}

The TileSets List Requirements Class defines a generic operation for retrieving a list of tilesets, without association to any particular type of resources.

Table 3. Overview of resource and common direct link that corresponds to the tileset list
Resource name Common path

Tileset list

…​/tiles

Requirements Classes defining data origins

The Dataset Tilesets Requirements Class defines how to retrieve all tiles for a dataset that could potentially consist of multiple geospatial data resources. All implementation instances of the Tiles API must implement this Requirements Class if they are claiming to support dataset tiles following this OGC API - Tiles - Part 1: Core Standard. Dataset tiles may combine content from multiple geospatial resources, regardless of whether those are available separately (as tiles or otherwise).

Table 4. Overview of resource and common direct links that correspond to the dataset tileset
Resource name Common path

Vector tileset list

/tiles

Map tileset list

/map/tiles

Styled Map tileset list

/styles/{styleId}/map/tiles

The GeoData TileSets Requirements Class supports the retrieval of tiles from a specific geospatial data resource.

Table 5. Overview of resource and common direct links that correspond to the geospatial data resources tilesets
Resource name Example of possible paths

Vector tileset list

/collections/{collectionId}/tiles

Map tileset list

/collections/{collectionId}/map/tiles

Styled Map tileset list

/collections/{collectionId}/styles/{styleId}/map/tiles

Requirements classes defining query parameters

The Collections Selection Requirements Class supports the listing of specific geospatial data resources from which to retrieve tiles such as for use with data set tiles.

Table 6. Overview of resource and common direct links that correspond to geodata selection
Resource name Example of possible paths

Vector Tileset

/tiles/{tileMatrixSetId}?collections={collectionId},{collectionId},…​

Vector Tile

/tiles/{tileMatrixSetId}/{tileMatrix}/{tileRow}/{tileCol}?collections={collectionId},{collectionId},…​

Map tileset

/map/tiles/{tileMatrixSetId}?collections={collectionId},{collectionId},…​

Map tile

/map/tiles/{tileMatrixSetId}/{tileMatrix}/{tileRow}/{tileCol}?collections={collectionId},{collectionId},…​

The DateTime Requirements Class specifies how to provide tiles in a domain that has a generic time dimension.

Requirements classes for specific resource representations

The OpenAPI Specification 3.0 Requirements Class specifies requirements for an OpenAPI 3.0 definition in addition to those defined in OGC API - Common - Part 1: Core.

The XML TileSet Metadata Requirements Class specifies how to use XML as an alternative encoding for describing tilesets.

The OGC API — Tiles Standard does not mandate a specific encoding or format for representing tiles and remains flexible and extensible to other formats that users and providers might need. However, Requirements Classes are provided for the following common tile encodings:

All Tiles API Requirements Classes can be viewed as building blocks that can be implemented in combination with other more fundamental requirements classes that provide support for Web API discovery, conformity and Web API formal definition (e.g., OpenAPI). Possible alternatives for these fundamental Requirements Classes are OGC API - Common - Part 1: Core or OGC API - Features - Part 1: Core.

All requirements-classes and conformance-classes described in this document are owned by the Standard(s) identified.

Note
Despite the fact that full paths and full path templates in the above resource tables are used in many implementations of the OGC API — Tiles Standard, these exact paths are ONLY examples and are NOT required by this Standard. Other paths are possible if correctly described by the Web API definition document and the links between resources.

Declaration of conformance

Conformance with this Standard shall be checked using all the relevant tests specified in Annex A (normative) of this document if the respective conformance class URIs listed in Table 7 are present in the Conformance Declaration response. 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 (OGC 08-134r11) and the OGC Compliance Testing website.

Table 7. Conformance class URIs
Conformance class URI

Core

http://www.opengis.net/spec/ogcapi-tiles-1/1.0/conf/core

TileSet

http://www.opengis.net/spec/ogcapi-tiles-1/1.0/conf/tileset

Tilesets list

http://www.opengis.net/spec/ogcapi-tiles-1/1.0/conf/tilesets-list

Dataset tilesets

http://www.opengis.net/spec/ogcapi-tiles-1/1.0/conf/dataset-tilesets

Geodata tilesets

http://www.opengis.net/spec/ogcapi-tiles-1/1.0/conf/geodata-tilesets

Collections selection

http://www.opengis.net/spec/ogcapi-tiles-1/1.0/conf/collections-selection

DateTime

http://www.opengis.net/spec/ogcapi-tiles-1/1.0/conf/datetime

OpenAPI Specification 3.0

http://www.opengis.net/spec/ogcapi-tiles-1/1.0/conf/oas30

XML

http://www.opengis.net/spec/ogcapi-tiles-1/1.0/conf/xml

PNG

http://www.opengis.net/spec/ogcapi-tiles-1/1.0/conf/png

JPEG

http://www.opengis.net/spec/ogcapi-tiles-1/1.0/conf/jpeg

TIFF

http://www.opengis.net/spec/ogcapi-tiles-1/1.0/conf/tiff

NetCDF

http://www.opengis.net/spec/ogcapi-tiles-1/1.0/conf/netcdf

GeoJSON

http://www.opengis.net/spec/ogcapi-tiles-1/1.0/conf/geojson

Mapbox Vector Tiles

http://www.opengis.net/spec/ogcapi-tiles-1/1.0/conf/mvt

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 19-014r3], OGC Abstract Specification Topic 22 - Core Tiling Conceptual and Logical Models for 2D Euclidean Space (2020)

  • [OGC 17-083r4], OGC Two Dimensional Tile Matrix Set and Tile Set Metadata (2022)

  • [OGC 19-072] Charles Heazel: OGC API - Common - Part 1: Core (Draft). OGC 19-072, Open Geospatial Consortium, http://docs.ogc.org/DRAFTS/19-072.html

  • [OGC 20-024] Charles Heazel: OGC API - Common - Part 2: Geospatial Data (Draft). OGC 20-024, Open Geospatial Consortium, http://docs.ogc.org/DRAFTS/20-024.html

  • [OGC 10-090r3], Ben Domenico: OGC 10-090r3, OGC Network Common Data Form (NetCDF) Core Encoding Standard version 1.0. Open Geospatial Consortium (2011)

  • [RFC 7946], Internet Engineering Task Force (IETF). RFC 7946: The GeoJSON Format [online]. Edited by H. Butler, M. Daly, A. Doyle, S. Gillies, S. Hagen, T. Schaub. 2016 [viewed 2020-03-16]. Available at https://www.rfc-editor.org/rfc/rfc7946.html

  • [TIFF V6.0], Adobe Developers Association: TIFF Specification Revision 6.0. (1992)

  • [OGC 19-008r4], Devys, E., Habermann, T., Heazel, C., Lott, R., Rouault, E.: OGC GeoTIFF 1.1 standard (2019)

  • [ISO/IEC 10918-1], ISO/IEC: ISO/IEC 10918-1, Information technology — Digital compression and coding of continuous-tone still images: Requirements and guidelines. International Organization for Standardization, International Electrotechnical Commission, Geneva

  • [ISO/IEC 15948], ISO/IEC 15948:2004, Information technology — Computer graphics and image processing — Portable Network Graphics (PNG): Functional specification

Note
Certain conformance classes have a dependency on OGC API - Common - Part 1: Core or OGC API - Common - Part 2: Geospatial data. In some cases, it is possible to replace these dependencies with OGC 17-069r3 OGC API - Features - Part 1: Core.

Terms, definitions and abbreviated terms

Terms and definitions

This document also uses terms defined in Sub-clause "Terms and Definitions" of OGC API - Common, Part 1: Core.

For the purposes of this document, the following additional terms and definitions apply.

coverage tile

tile that contains information, often in a gridded form, where the values represent observations or measurements as a count, or quantity using some unit of measure.

Note
Coverage tiles are generated in combination with OGC API - Coverages, and can also be generated by combining a subset (trim) and resampling operation. Usually, visualizing a coverage tile on a rendering device implies mapping those values to colors.

dataset

a set of data, published or curated by a single agent, and available for access or download in one or more representations (modified from DCAT: https://www.w3.org/TR/vocab-dcat-2/#dcat-scope).

Note
A Web API implementing OGC API - Common often gives access to a single dataset which may be comprised of one or more geospatial data resources.

geospatial data resource

web accessible resource that consists of a set of geospatial data.

Note
In Web APIs implementing OGC API - Common - Part 2: Geospatial Data, geospatial data resources are referred to as collections and are defined in the collections conformance class.
Note
geodata is sometimes used in this document as an abbreviation of geospatial data

geospatial resource aspect

web accessible resource that represents a component of geospatial information (metadata, schemas…​) or geospatial data accessed using a particular mechanism and data model (e.g., feature items, tiles, maps, coverages,…​) of a more generic geospatial data resource (e.g., a collection).

Note
Not to be confused with a web accessible resource representation. While resource representations share the same path and are selected by format negotiation, geospatial aspects use different paths. Commonly a geospatial aspect is a subpath of a geospatial data resource.

landing page

any page whose primary purpose is to contain a description of something else. Landing pages often provide summaries or additional information about the thing that they describe. (W3C, URLs in Data Primer)

In the context of the OGC API Standards, a landing page serves as the root node of the API Resource tree and provides the information needed to navigate all the resources exposed through the API. The landing page provides access to the root of a dataset.

map tile

tile that contains information in a raster form where the values of cells are colors which can be readily displayed on rendering devices.

Note
Map tiles are generated in combination with OGC API - Maps.

tile

geometric shape with known properties that may or may not be the result of a tiling (tessellation) process. A tile consists of a single connected "piece" without "holes" or "lines" (topological disc).

Note
From OGC 19-014r1: Core Tiling Conceptual and Logical Models for 2D Euclidean Space

In the context of a 2D tile matrix, a tile is one of the rectangular regions of space, which can be uniquely identified by row and column integer indices, making up the tile matrix.

In the context of a geospatial data tile set, a tile contains data for such a partition of space as part of an overall set of tiles for that tiled geospatial data.

Note
From OGC 17-083r4: OGC Two Dimensional Tile Matrix Set and Tile Set Metadata standard
Note
Tiles are useful to efficiently request, transfer, cache, display, store and process geospatial data for a specific resolution and area of interest, providing deterministic performance and scalability for arbitrarily large datasets.
Note
Tiles can contain a variety of data types, such as grid-based pictorial representations (map tiles), coverage subsets (coverage tiles), or feature-based representations (vector tiles).

tile matrix

tiling grid in a given 2D coordinate reference system, associated to a specific scale and partitioning space into regular conterminous tiles, each of which being assigned a unique identifier.

Note
From OGC 17-083r4: OGC Two Dimensional Tile Matrix Set and Tile Set Metadata standard
Note
Each tile of a tile matrix is uniquely identifiable by integer indices for the row and the column. The number of rows is referred to as the matrix height, while the maximum number of columns is referred to as the matrix width (the number of columns can vary for different rows in variable width tile matrices).

tile matrix set

tiling scheme consisting of a set of tile matrices defined at different scales covering approximately the same area and having a common coordinate reference system.

Note
From OGC 17-083r4: OGC Two Dimensional Tile Matrix Set and Tile Set Metadata standard

tile indexing scheme

scheme to uniquely reference a tile in a tiling scheme by the use of a unique identifier (or set of identifiers), and reversely, which unique identifier (or unique set of identifiers) corresponds to a space satisfying the geometric properties of a specific tile.

Note
From OGC 17-083r4: OGC Two Dimensional Tile Matrix Set and Tile Set Metadata standard

tile set

a set of tiles resulting from tiling data according to a particular tiling scheme.

Note
From OGC 19-014r1: Core Tiling Conceptual and Logical Models for 2D Euclidean Space, but adapted to clarify that in the context of this document, a tile set refers specifically to a set of tiles containing data and following a common tiling scheme.

tiling scheme

scheme that defines how space is partitioned into individual tiles, potentially featuring multiple levels of detail (each tiling at a different granularity to reflect a different resolution or scale).

A tiling scheme defines the spatial reference system and the geometric properties of each tile defined by the scheme. Those properties include which space each tile occupies (the tile’s spatial extent), as well as a tile coordinate origin if a particular corner of origin convention is established.

Note
A tiling scheme can be defined on top of a CRS as well as other spatial reference systems such as DGGS and other organizations including irregular ones. In this document, only tiling schemes based on CRSs are supported.
Note
From OGC 17-083r4: OGC Two Dimensional Tile Matrix Set and Tile Set Metadata standard

tile set metadata

additional metadata beyond the common properties defining the tile set. Such metadata could be an abstract, the owner, the author, or other common metadata. [OGC 19-014r3]

metadata describing common properties defining a tile set, layers and styles used to produce the tile set, the limits of the tile matrix with actual data and common metadata such as abstract, owner, author, etc.

Note
From OGC 17-083r4: OGC Two Dimensional Tile Matrix Set and Tile Set Metadata standard

vector tile

admitted:[tiled vector feature data]

tile that contains vector data that has been generalized (simplified) at the tile scale resolution and clipped by the tile boundaries.

Note
From OGC 17-083r4: OGC Two Dimensional Tile Matrix Set and Tile Set Metadata standard

Web API

API using an architectural style that is founded on the technologies of the Web. [source: OGC API - Features - Part 1: Core]

Note
See Best Practice 24: Use Web Standards as the foundation of APIs (W3C Data on the Web Best Practices) for more detail.

Web API based implementation

a server software that implements a Web API.

Note
The Web API based implementations mentioned in the context of this Standard declare conformity to at least one Conformance Class defined by this Standard.

Conventions

This section provides details of conventions used in this document.

Identifiers

The normative provisions in this standard are denoted by the URI http://www.opengis.net/spec/ogcapi-tiles-1/1.0 .

All requirements and conformance tests that appear in this document are denoted by partial URIs which are relative to this base.

To express relationships between resources, RFC 8288 (Web Linking) is used.

The following IANA link relation types are used in this Standard:

  • alternate: Refers to a substitute for this context.

  • self: Conveys an identifier for the link’s context.

  • item: The target IRI points to a resource that is a member of the collection represented by the context IRI.

  • service-desc: Identifies a service description for the context that is primarily intended for consumption by machines. (Web API definitions are considered service descriptions)

  • service-doc: Identifies service documentation for the context that is primarily intended for human consumption.

The following link relation types specified in the Two Dimensional Tile Matrix Set and Tileset Metadata Standard are used:

In addition, the following link relation types are used for which no applicable IANA-registered link relation type could be identified:

Used in combination with OGC API - Features - Part 1: Core or OGC API - Common - Part 1: Core, other link relation types will be used, including:

Used in combination with OGC API - Features - Part 1: Core or OGC API - Common - Part 2: Geospatial Data, other link relation types will be used, including:

Each resource representation includes an array of links. Implementations are free to add additional links for all resources provided by the Web API.

Use of HTTPS

For simplicity, this Standard in general only refers to the HTTP protocol. This is not meant to exclude the use of HTTPS and simply is a shorthand notation for "HTTP or HTTPS." In fact, most servers are expected to use HTTPS, not HTTP.

Overview

Introduction

The OGC API — Tiles Standard defines building blocks that can be used in the implementation of Web API based servers and compatible clients to support the retrieval of tiled geospatial data that follow the structure defined in the OGC Two Dimensional Tile Matrix Set and Tile Set Metadata 2.0 Standard (OGC 17-083r4) (see Requirements Class "Core"), which is also known as the 2D TMS Standard. The OGC API — Tiles Standard assumes that the reader is familiar with the concepts in the OGC 17-083r4 Standard, such as a tile, tile set, tile set metadata, tile matrix and tile matrix set. If that is not the case, reading the OGC 17-083r4 overview subsection is recommended.

Services and clients are encouraged to support as many of the TileMatrixSets defined in Annex D and E of the OGC 17-083r4 Standard as possible. Other TileMatrixSets defined in the OGC TileMatrixSet register for all geospatial data resources to maximize interoperability should be considered. However, support for any specific TileMatrixSet is not required. Tiles that share the same TileMatrixSet definition can be easily visualized together in a data integration client.

The OGC API - Tiles standard is an alternative to the OGC Web Map Tile Service (WMTS) Standard [1]. The fundamental concept TileMatrixSet has not changed from the one used in WMTS. Therefore tiles provided via a WMTS instance and the ones generated by an OGC API — Tiles implementation instance that are based on the same TileMatrixSet can also be easily visualized and/or processed together. If the selected tile matrix set is the one called WebMercatorQuad (see OGC 17-083r4 Annex D.1), tiles are also compatible with the ones made available by some popular mass market approaches.

WebMercatorQuadZoom15
Figure 1. Contiguous tiles from different services and APIs sharing same WebMercatorQuad tile matrix set and the tile matrix identified as 15 (sometimes called "zoom")

This Standard does not specify any requirement for the type of geospatial data resource that could be delivered as tiles. Provided that the geospatial data resources can be organized into tiles, any such resource can be supported regardless of whether they are maps, vector features, coverages, a resource that does not represent data per se (e.g., an annotation) and so forth.

Note
The geospatial data resources (e.g., collections) replace the concept of layer in the OGC Web Map Service (WMS) [2] and WMTS Standards. The concept of collections allows to provide multiple access mechanisms defined in complementary OGC API Standards, such as tiles and features, to the same collection of data (through different geospatial resource aspects). Geospatial data resources can advertise one or more lists of available tilesets (see Requirements Class "TileSet" and Requirements Class "Tilesets List"). This Standard also defines how to link to tilesets originating from two specific data resources: OGC API datasets (see Requirements Class "Dataset Tilesets") and collections (see Requirements Class "GeoData Tilesets"). However, other OGC API Standards can provide other access and linking possibilities. Accessing the geospatial data resource content (other than as tiles) or its descriptions is possible but out of the scope of this Standard. If a description of the geospatial data resource is specified by another Standard, and this description has a mechanism to add links to other resources, this Standard indicates the need to add a link to the list of available tilesets.

The OGC API - Tiles standard does not specify how to get a Web API definition, the conformance class list, nor the collections lists. However, the Standard assumes that the first two are defined by an OGC API Standard (e.g., OGC API - Common - Part 1: Core or OGC API - Features - Part 1: Core Standards) and the latter by an OGC API for collections (e.g., OGC API - Common - Part 2: Geospatial data or the OGC API - Features - Part 1: Core Standard).

Evolution from OGC Web Services

OGC Web Service (OWS) standards have historically implemented a Remote-Procedure-Call-over-HTTP architectural style using Extensible Markup Language (XML) for payloads. This was the state-of-the-art in the late 1990s and early 2000s when some of the initial versions of OGC Web Services Standards were designed and documented. Their service oriented architectural style now has a competing resource-oriented Web API style. The WMTS 1.0 standard defines a resource-oriented architectural style but lacks a Web API definition. The OGC API - Tiles Standard specifies a Web API that follows the architecture of the Web and in particular the W3C/OGC Best Practices for sharing Spatial Data on the Web [18] as well as the W3C Best Practices for sharing Data on the Web [19]. The bibliography lists several OGC Engineering Reports from initiatives that led to the development of OGC API — Tiles. Some of the Engineering Reports are from OGC Testbed initiatives [10] [9] , whereas others are from the OGC Vector Tiles Pilot [12] [14] [15] [16] [17].

This Standard defines the necessary elements to incorporate tile support into a Web API implementation. These elements can be incorporated in an API based on the OGC API - Features - Part 1: Core or can be incorporated in a Web API implementation based on the OGC API - Common - Part 1: Core. Both of those Standards specify a kernel of a Web API approach to services that follows current resource-oriented architecture practices in the OGC. OGC API - Common provides the foundation upon which implementations of the OGC API Standards can be built. OGC API - Common can be integrated with this Standard and other resource-specific OGC API Standards to build a Web API implementation. However, this Standard is also designed in a way that can extend OGC API - Common, but does not make OGC API - Common mandatory. As such this Standard can be reused as a building block in other APIs that do not follow the OGC API pattern.

Beside the general alignment with the architecture of the Web (e.g., consistency with HTTP/HTTPS, hypermedia controls), another goal for the suite of OGC API Standards is modularization. This goal has several facets:

  • Clear separation between core requirements and more advanced capabilities. This OGC API - Tiles - Part 1: Core Standard defines the requirements that are relevant for anyone who wants to share or use Tiled Data at a fine-grained level. Additional capabilities that several communities are using today will be specified as extensions to this Standard.

  • Technologies that change more frequently are decoupled and specified in separate modules ("requirements classes" in OGC terminology). This enables, for example, the use/re-use of new encodings for spatial data or Web API definition (such as a new version of the OpenAPI description document).

  • Modularization is not just about a single "service". OGC API Standards provide building blocks that can be reused in Web APIs in general. In other words, a server supporting OGC API - Tiles Requirements should not be seen as a standalone service. Rather, the web API implementation should be viewed as a collection of Web API building blocks which together implement Tile capabilities. A corollary for this is that it should be possible to implement a Web API that concurrently conforms to conformance classes from the Features, Coverages, Maps, Tiles, and other future OGC API Standards.

The approach taken by OGC API Standards is intended to support two types of client developers:

  • Those that have never heard about the OGC. Developers should be able to create a client using the Web API definition without the need to adopt a specific OGC approach (they no longer need to read how to implement a GetCapabilities response document, allowing them to focus on the geospatial resource aspects).

  • Those that want to write a "generic" client that can access implementations of OGC API Standards. In other words, they are not specific to a particular Web API.

As a result of following a RESTful approach, implementations of an OGC API are not backwards compatible with OWS implementations per se. However, a design goal is to define OGC API Standards in a way that an interface of an implementation of an OGC API Standard can be mapped to or used as a façade to an existing OWS implementation (where appropriate). OGC API Standards are intended to be simpler and more modern, but still an evolution from the previous versions and their implementations making the transition easy such as by initially implementing façades in front of the current OWS services.

Relationship to other OGC API standards

The OGC WMS and WMTS standards share the concept of a map and the capability to create and distribute maps at a limited resolution and size. In WMS, the number of rows and columns that a map should have can be selected by the user within limits. In WMTS the number of rows and columns of the tile is predefined in the tile matrix.

Over time, in the OGC, the concept of a tile, initially used for map tiles has been generalized to other data models such as feature data (some vendors use the expression vector tiles) and even to coverage data or processes that can be parallelized dividing space into tiles. The OGC API - Tiles Standard presents an approach to tiles that can be applied to almost any resource type that returns geospatial data. If implemented in conjunction with the OGC API - Features Standard and designed to access a feature collection, the expected result is tiled feature data. If implemented in conjunction with the OGC API - Maps candidate standard and designed to access a collection that is transformed into a map by applying a style, the result should be map tiles (usually in PNG or JPEG format).

The OGC API - Tiles Standard can be referenced by other OGC Standards that provide resources that can be offered as tiles. For example:

  • The OGC API - Maps candidate standard specifies the link relation types to access map tilesets from a dataset or collection.

  • The OGC API - Styles candidate standard defines paths to list available styles from which tilesets can also be accessed.

  • The OGC API - Coverages candidate standard specifies the link relation types and specifics of retrieving coverage tiles.

  • The OGC API - Processes - Part 3: Workflows and Chaining candidate standard provides a mechanism to trigger localized processing workflows as a result of retrieving tiles (for a specific area and resolution of interest).

This document is the first part of a series of OGC API - Tiles "parts" that use the core and extensions model. Future parts might specify other extensions, such as how to retrieve multiple tiles in a single request. Other standards or extensions of standards may also provide mechanisms (e.g., additional query parameters) to deal with additional dimensions such as elevation, or more advanced temporal capabilities than what is defined in this standard’s datetime conformance class.

Using this standard independently

Although the OGC API — Tiles Standard is designed as a building block that can be leveraged by (or with) other OGC API Standards adding precisions about specific types of data available as tiles (e.g., OGC API - Features standard, and OGC API - Maps and OGC API - Coverages candidate standards), the conformance classes defined in this Standard are still concrete enough to make it possible to support distributing and requesting various types of tiled data, including coverages, vector features and maps, by relying strictly on the content herein and in the OGC Two Dimensional Tile Matrix Set and Tile Set Metadata 2.0 standard.

As informative guidance implementations should consider the following aspects.

Description of the domain

Three different mechanisms are defined by this Standard to describe the domain of the dimensions of the tiles, including spatiotemporal axes as well as additional dimensions.

In the Requirements Class "Tilesets List" (Requirements Class "Tilesets List"), the collection description inherited from OGC API - Common - Part 2 contains an extent property that can describe both the spatial and temporal domains of the data. In addition, the Unified Additional Dimensions common building block, used in the example OpenAPI definition, further specifies that additional dimensions shall be described in a similar way to the temporal dimension. An extra grid property in the example OpenAPI definition also allows specifying the resolution and the number of cells (for data organized as a regular grid) or a list of coordinates (for data organized as an irregular grid) along each dimension.

With the TileSet conformance class, the tileset metadata allows to specify a spatial bounding box for tiles as a whole, as well as for each individual collection of geospatial data represented or contained within the tiles (the layers). The resolution of these layers can also be specified by including the minimum and maximum cell size and equivalent scale denominators. The informative Annex J of the OGC Two Dimensional Tile Matrix Set and Tile Set Metadata 2.0 standard further extends this capability to describe the domain set by enhancing the schema to include bounds and resolution for additional dimensions as well being able to handle the specifics of unequal temporal units. Annex J also includes provisions to describe tile matrix sets featuring additional dimensions which not only extend in other dimensions but can also define divisions and down sampling of these additional dimensions for lower resolution tile matrices.

In addition to describing the bounds of the tileset dimensions, the Requirements Class "TileSet" (Requirements Class "TileSet") also supports specifying limits in terms of identifiers for the minimum and maximum tile matrices, tile rows, and tile columns for which data is available.

Description of the observed or measured properties

The Requirements Class "TileSet" (Requirements Class "TileSet"), supports specifying the tileset metadata for the measured or observed properties for each collection of geospatial data represented or contained within the tiles (the layers). For each of these properties, a JSON schema and semantic information can be described. This schema can be used to describe properties for feature collections or the range type of coverages.

Available formats and tile response expectations

The Tiles API Standard, in Requirements classes for tile encodings (Requirements classes for tile encodings), defines six requirements classes for specific encodings for different types of tiled data. Additional encodings can be supported using HTTP content negotiation, following conventions specific to those encodings. In this case requirements are expected to fall back to the closest encoding defined in Requirements classes for tile encodings (Requirements classes for tile encodings) (e.g., using the GeoTIFF and netCDF conformance class as a model for other coverage data, the JPEG and PNG classes for other map tiles encodings, and the Mapbox Vector Tiles or GeoJSON for other vector tiles encodings). The informative Annex J of the OGC Two Dimensional Tile Matrix Set and Tile Set Metadata 2.0 Standard also describes a mechanism that can be used to deliver and access 3D content using this standard, including 3D models either batched as a single mesh, or as points vector tiles referencing shared 3D models.

Limitations

Although implementations of the OGC API — Tiles Standard can be used "stand-alone", other OGC API Standards or draft specifications may provide additional capabilities and specify additional normative requirements describing how to retrieve specific types of tiled content. This includes describing in greater detail the domain, or the observed or measured properties within the tiled data. Conforming to these standards as well may enable greater interoperability. For example, for map tiles, this Standard does not define how a client requests a specific background color or whether tiles should be opaque or transparent expecting that the OGC API — Maps will do so.

How to approach an implementation of an OGC API Standard

There are at least two ways to approach an implementation of an OGC API Standard.

  • Read the landing page, look for links, follow them and discover new links until the desired resource is found

  • Read a Web API definition document that specifies a list of paths and path templates to resources.

For the first approach, many resources in the OGC Web APIs include links with rel properties to know the reason and purpose for this relation. The following figure illustrates the resources as ellipses and the links as arrows with the link rel as a label.

relMapTiles
Figure 2. Resources and relations to them via links

For the second approach, implementations should consider Requirements Class "OpenAPI Specification 3.0" (Requirements Class "OpenAPI Specification 3.0") which specifies the use of operationID suffixes, providing a mechanism to associate API paths with the requirements class that they implement.

There is yet a third way to approach an implementation of an OGC API Standard that relies on assuming a set of predefined paths and path templates. These predefined paths are used in many examples in this Standard and are presented together in Table 8. Many implementations of this Standard will provide a Web API definition document (e.g. OpenAPI) using this set of predefined paths and path templates to get necessary resources directly. All this could mislead the reader into getting the false impression that the predefined paths are enforced. They are not. Therefore, building a client that is assuming a predefined set of paths is risky. Even so, many API implementations will actually follow the predefined set of paths and the client using this approach could be successful on many occasions. Again, be aware that these paths are not required by this Standard.

Table 8. Overview of resources and common direct links that can be used to define an OGC API - Tiles implementation
Resource name Common path

Landing page4

{datasetRoot}/

Conformance declaration4

{datasetRoot}/conformance

Tiling Schemes6

{datasetRoot}/tileMatrixSets

Tiling Scheme6 (tile matrix set2)

{datasetRoot}/tileMatrixSets/{tileMatrixSetId}

Dataset Tiles

Dataset Feature Tiles3

Dataset tileset list1,2

{datasetRoot}/tiles

Dataset tileset metadata1,2 (in one tile matrix set2)

{datasetRoot}/tiles/{tileMatrixSetId}

Dataset feature tile1,3

{datasetRoot}/tiles/{tileMatrixSetId}/{tileMatrix}/{tileRow}/{tileCol}

Dataset Map tiles

Map tileset list2 (geospatial resources1)

{datasetRoot}/map/tiles

Map tileset metadata2 (geospatial resources1)

{datasetRoot}/map/tiles/{tileMatrixSetId}

Map tile1

{datasetRoot}/map/tiles/{tileMatrixSetId}/{tileMatrix}/{tileRow}/{tileCol}

Geospatial data collections5

Collections5

{datasetRoot}/collections

Collection5

{datasetRoot}/collections/{collectionId}

Collection Feature Tiles3

Feature tileset list2

{datasetRoot}/collections/{collectionId}/tiles

Feature tileset metadata2

{datasetRoot}/collections/{collectionId}/tiles/{tileMatrixSetId}

Feature tile3

{datasetRoot}/collections/{collectionId}/tiles/{tileMatrixSetId}/{tileMatrix}/{tileRow}/{tileCol}

Collection Map tiles

Map tileset list2

{datasetRoot}/collections/{collectionId}/map/tiles

Map tileset metadata2

{datasetRoot}/collections/{collectionId}/map/tiles/{tileMatrixSetId}

Map tile

{datasetRoot}/collections/{collectionId}/map/tiles/{tileMatrixSetId}/{tileMatrix}/{tileRow}/{tileCol}

Coverage tiles

Coverage tileset list2

{datasetRoot}/collections/{collectionId}/coverage/tiles

Coverage tileset metadata2

{datasetRoot}/collections/{collectionId}/coverage/tiles/{tileMatrixSetId}

Coverage tile

{datasetRoot}/collections/{collectionId}/coverage/tiles/{tileMatrixSetId}/{tileMatrix}/{tileRow}/{tileCol}

1 From the whole dataset or one or more geospatial resources or collections

2 Specified in the OGC Two Dimensional Tile Matrix Set and Tile Set Metadata 2.0 standard

3 Some vendors use the expression vector tiles

4 Specified in the OGC API - Common - Part 1: Core standard

5 Specified in the OGC API - Common - Part 2: Geospatial Data candidate standard

6 Recommended but not required by the core of this standard

Note
Despite the fact that full path and full path templates in the previous table are used in many implementations of the OGC API — Tiles Standard, these exact paths are ONLY examples and are NOT required by this Standard. Other paths are possible if correctly described in by the Web API definition document and/or the links between resources. However, the TileSets list conformance class does require that paths listing tilesets end with …​/tiles.
Note
The use of a {tileMatrixSetId} URI template variable is not required by this Standard. However, the TileMatrixSet definition permission proposes to make all tileset paths homogeneous by using it. A {tileMatrixSetId} template variable must NOT be used in templated links of the tileset metadata as defined in Requirements Class "TileSet" (Requirements Class "TileSet").

Why we call them "tiles"

The word tile is traditionally used to refer to a thin, flat or convex slab of hard material such as baked clay or plastic, laid in rows to cover walls, floors, and roofs. In this Standard, the same approach is used to cover the viewport of a computer screen with tiles representing parts of the world (geospatial features). Actually some examples of traditional tilesets representing geospatial features can also be found. They are tilesets with only one available tilematrix.

LisbonDiscoveryMoumentFloor
Figure 3. Tiles in the floor of the monument of discovery in Lisbon, Portugal. (Lee Cannon April 2010, CC-BY-SA, https://www.flickr.com/photos/leecannon/5127274297)
PragaAirportTerminal2
Figure 4. Tiles in the floor of the terminal 2 of the Prague Airport, Czech Republic. (Joan Masó, September 2022, CC0)

Requirements Class "Core"

Example 1. Requirements Class Core

The Core Requirements Class is generically designed to describe an HTTP GET operation, as well as its response, to retrieve tiles from a tileset which can be described by the OGC Two Dimensional Tile Matrix Set and Tile Set Metadata 2.0 standard. The Core introduces the idea of URI templates and variables associated with the TileMatrix, TileRow, and TileCol concepts defined in the OGC Two Dimensional Tile Matrix Set and Tile Set Metadata 2.0 Standard but it does not prescribe a particular path or template form for the URL of those tiles.

The Core focuses on the individual tiles and does not describe the tileset as a whole. The implementer of a Web API should also implement support for tileset metadata in conjunction with the core requirements class as it provides important information to clients. This can be done by also implementing the Requirements Class "Tileset" (Requirements Class "TileSet") or integrating within another API providing this capability through another mechanism.

A tile

A tile resource is a geospatial resource presenting a fragment of a much bigger geospatial data resource that is spatially constrained at the boundaries of the selected tile in a tile matrix set.

Operation

An HTTP GET request allows for the retrieval of a single tile that represents information coming from geospatial data resources.

identifier

/req/core/tc-op

part

The tiles making up a tileset containing available data SHALL be available via an HTTP GET request to a URI that can be built from a template containing two or three variables. If the tileset is available for more than one tilematrix, the template SHALL contain three variables (such as {tileMatrix}, {tileRow} and {tileCol} as defined by the tileset conformance class, or {z}, {y} and {x}). If the tileset is available for a single tilematrix, the template SHALL contain two variables (such as {tileRow} and {tileCol} as defined by the tileset conformance class, or {y} and {x}). The URI is obtained by substituting the variables by their respective valid values.

part

These variables SHALL correspond to the tile matrix, tile row and tile column of a particular tile matrix set as defined by the 2D Tile Matrix Set standard.

part

The API SHALL provide a mechanism to obtain this template and associate the variables to their respective meaning, for example by implementing the tileset conformance class, or through an API definition.

Note
The core Requirements Class by itself does not prescribe specific names for these variables, nor does it define a specific mechanism to communicate the template.

Typical geospatial data resources that can be retrieved as tiles are: vector features (available at /collections/{collectionId}/items in OGC API - Features - Part 1: Core, for which it is recommended to provide tilesets at /collections/{collectionId}/tiles), maps (specified in OGC API - Maps) or coverages (specified in OGC API - Coverages).

identifier

/rec/core/tc-op

part

A tiles implementation SHOULD consider using the tiles URI template variables in the following common order and form: {tileMatrix}/{tileRow}/{tileCol}

part

A tiles implementation SHOULD consider specifying the variables {tileMatrix} even if there is only one valid value for them.

Note
Clients should not assume the common order of URI template variable and should extract them from the examples in the "links" section or from the API description path templates.

The desired encoding is selected by the client using HTTP content negotiation. If necessary, the client can determine the supported encodings, or more precisely the media types of the supported encodings, from the Web API definition, or from the conformance declaration (see Requirements classes for tile encodings).

The core of the OGC API - Tiles Standard provides a mechanism to select and retrieve a tile in a TileMatrixSet that is agreed between the client and server. This Core Requirements Class does not discuss the details of how the client and service agree on which TileMatrixSet they use.

Parameter tileMatrix

If the API implements OGC API - Common - Part 1: Core, the definition of this operation SHALL support a parameter tileMatrix with the following characteristics (shown as OpenAPI Specification 3.0 fragment):

  name: tileMatrix
  in: path
  description: Identifier selecting one of the scales defined in the TileMatrixSet and representing the scaleDenominator the tile.
  required: true
  schema:
    type: string
  example: '11'

Parameter tileRow

If the API implements OGC API - Common - Part 1: Core, the definition of this operation SHALL support a parameter tileRow with the following characteristics (shown as OpenAPI Specification 3.0 fragment):

  name: tileRow
  in: path
  description: Row index of the tile on the selected TileMatrix. It cannot exceed the MatrixWidth-1 for the selected TileMatrix
  required: true
  schema:
    type: integer
    minimum: 0
  example: '827'

Parameter tileCol

If the API implements OGC API - Common - Part 1: Core, the definition of this operation SHALL support a parameter tileCol with the following characteristics (shown as OpenAPI Specification 3.0 fragment):

  name: tileCol
  in: path
  description: Column index of the tile on the selected TileMatrix. It cannot exceed the MatrixHeight-1 for the selected TileMatrix.
  required: true
  schema:
    type: integer
    minimum: 0
  example: 1231

Parameter tileMatrixSetId (optional)

An extra {tileMatrixSetId} variable MAY be used by the API definition for simplification purposes and, this way, make all tileset paths homogeneous.

The {tileMatrixSetId} variable will be interpreted as one of TileMatrixSet identifiers supported by the resource. In other words, tileMatrixSetId represents all the TileMatrixSets supported by the resource.

The following OpenAPI Specification 3.0 fragment MAY be used in this case:

  name: tileMatrixSetId
  in: path
  description: Identifier selecting one of the TileMatrixSetId supported by the resource.
  required: true
  schema:
    type: string
  example: 'WebMercatorQuad'

Response

A successful response to a tile GET operation will be consistent with the media type of the resource requested. This Standard does not impose any media type or file format. Examples of common media types are:

  • For features, the media type of the response may be GeoJSON (application/geo+json) or Mapbox Vector Tiles (application/vnd.mapbox-vector-tile);

  • For coverages, the media type of the response may be GeoTIFF (image/tiff) or netCDF (application/netcdf or application/x-netcdf);

  • For maps, the media type of the response may be JPEG (image/jpeg) or a PNG (image/png).

identifier

/req/core/tc-success

part

A successful execution of the tile operation with content SHALL be reported as a response with an HTTP status code 200.

part

The content of that response SHALL be consistent with the format requested via HTTP content negotiation and represent elements inside or intersecting with the spatial extent of the geographical area of the tile identified by the tile matrix, tile row, and tile column of the tileset’s tile matrix set.

part

For image tiles, where this behavior is not explicitly overridden by an extension (e.g., a query parameter, or format-specific requirements), the width and height of the image (measured in raster pixels) SHALL be equal to the tileWidth and tileHeight of the corresponding tile matrix.

part

For gridded coverage tiles, where this behavior is not explicitly overridden by an extension (e.g., a query parameter, or format-specific requirements), for coverages whose cells span the whole area of the resolution, the width and height of the coverage tile (measured in cells) SHALL be the tileWidth and tileHeight of the corresponding tile matrix. In addition, for coverages whose cells are measurements or observations for a conceptually infinitely small point the width and height of the coverage tile SHALL be tileWidth + 1 and tileHeight + 1.

identifier

/per/core/tc-core-tile-encoding

part

This Standard does not impose any media type on the encoding of a response containing tiled feature data. For features, the media type MAY be GeoJSON, Mapbox Vector Tiles or some other format.

part

This Standard does not impose any media type on the encoding of a response containing tiled coverage data. For coverages, the media type MAY be a GeoTIFF, netCDF or some other format.

part

This Standard does not impose any media type on the encoding of a map tile response. For maps, the media type MAY be JPEG, PNG or some other format.

identifier

/rec/core/tc-multiple-media-types

part

If both "image/png" and "image/jpeg" are supported at an endpoint and are present in the HTTP "Accept" request header with the same q value, and no other supported output format is present with a higher q value, the server SHOULD return the requested image in whichever of these two formats is considered optimal (typically PNG if there’s transparency or for categorical maps where a limited number of colors is used, and JPEG otherwise).

Normally, the content partially outside the tile bounding box will be clipped at the extent of the bounding box. This can be done efficiently when tiles are in raster format (e.g., map tiles). However, tiles containing features in vector format may not clip features that are partially outside, or clip to a slightly enlarged bounding box (a buffer), to ensure continuity of features or for performance.

identifier

/rec/core/tc-success-scale

part

The content in response of a tile request SHOULD be simplified to comply with the scale denominator represented by the TileMatrix identified. Full resolution geographical elements are only expected for the lower values of scale denominators.

identifier

/rec/core/tc-deepfullempty

part

If a requested tile is empty (no data) and all tiles within its extent at all more detailed zoom levels (tile matrices) are guaranteed to also be empty, the response header SHOULD include OATiles-hint: empty.

part

If a requested tile is totally inside of a polygon or other situations that may result in a uniform content such as a solid color for a map, or a grid completely filled with the same value for a coverage and all tiles within its extent at all more detailed zoom levels (tile matrices) are guaranteed to also be in the same situation, the response header SHOULD include OATiles-hint: full.

Note
A client could use this information to avoid requesting the more detailed tiles of that area.

To enable search engines to easily discover the content offered by an implementation of OGC API - Tiles, as well as to enable web browsers to easily display the content offered by the Web APIs, this Standard allows for responses to operations to be encoded in HTML.

identifier

/per/core/tc-core-html

part

Every 200-response of an operation of the server MAY support the media type text/html.

Error conditions

A general summary of the HTTP status codes can be found in OGC API - Features - Part 1: Core, version 1.0 as well as in OGC API - Common — Part 1: Core.

identifier

/req/core/tc-error

part

If the path parameter values tileMatrix, tileRow, tileCol for a tile request are out-of-range (outside the tile matrix set or tile matrix set limits of the resource), the HTTP response SHALL use a status code 404 or a 400. The response can also contain an exception report.

part

If the tile has no content due to lack of data in the area, but is within the data resource’s tile matrix sets and tile matrix sets limits, the HTTP response will use the status code either 204 (indicating an empty tile with no content) or a 200 with the content of a blank response compatible with the requested media type (which may or may not be zero bytes long, depending on the output format).

Declaration of conformance classes

To support "generic" clients wishing to access multiple implementations of OGC API Standards and extensions - and not "just" a specific Web API / server, the Web API must declare the conformance classes it implements and conforms to.

Response

The conformance declaration mainly consists of a list of links.

identifier

/req/core/conformance-success

part

If the API instance has a mechanism to advertise conformance classes, the list of conformance classes SHALL include the ones defined in this standard and listed in Table 7 that are supported by this API instance.

If the server also declares conformity to OGC API - Common - Part 1: Core or to OGC API - Features - Part 1: Core, version 1.0, then it has to consider the OGC API - Common requirements for declaring conformance, i.e. the use of a conformance declaration page. In the JSON format the conformance declaration page is an array of links following the link schema defined in the OGC API - Common or in OGC API - Features - Part 1: Core, version 1.0 standards. Below is an example fragment of a conformance declaration page conformant to OGC API - Common and OGC API - Tiles.

Example 2. Conformance Information Page fragment
{
  "conformsTo": [
    "http://www.opengis.net/spec/ogcapi-common-1/1.0/conf/core",
    "http://www.opengis.net/spec/ogcapi-tiles-1/1.0/conf/core"
  ]
}

Requirements Class "TileSet"

Overview

The tileset Requirements Class provides a mechanism to retrieve metadata for a set of tiles of geospatial data tiled according to one specific TileMatrixSet. This Class also provides a mechanism to obtain a templated link to retrieve individual tiles as defined in the core conformance class.

This Class describes the HTTP GET operation for accessing a tileset resource and its response but does not prescribe a specific path. The response provides metadata as per the OGC Two Dimensional Tile Matrix Set and Tile Set Metadata 2.0 Standard.

The essential elements of this metadata are:

  • A link to the definition of the TileMatrixSet (either one registered in the OGC TileMatrixSet register that is controlled by the OGC Naming Authority (OGC-NA) SubCommittee (SC), or to a custom TileMatrixSet definition).

  • A TileMatrixSet URI in the case of a TileMatrixSet registered with an authority (e.g. the OGC TileMatrixSet register).

  • A Coordinate Reference System (usually provided as a URI).

  • A templated link (URI) to individual tiles.

  • A data type (indicating whether the tileset consists of vector, coverage or map tiles).

Metadata may optionally also provide additional information, such as:

  • A title.

  • A description.

  • The limits of the tileset if it does not span the full extent of the TileMatrixSet.

  • The geospatial data resources involved in the creation of the tiles (potentially including links to OGC API collections).

  • A schema of the available properties contained within the tiles.

  • Styles used to create the tiles.

  • A central point on which a viewer may initially focus.

  • Attribution.

A link to a definition of a TileMatrixSet is always required whether a custom TileMatrixSet or a registered TileMatrixSet is used. Having the Web API host a local definition of each supported TileMatrixSet to ensure availability is recommended.

Tileset resource

A tileset consists of a set of tiles obtained by partitioning geospatial data according to a particular TileMatrixSet. The tileset metadata contains all the information necessary for a client application to request tiles from the tileset.

Tileset path

This class does not specify a full path to a tileset. Generally, tileset resources are linked from a tilesets list resource (refer to the Requirements Class "Tilesets List" (Requirements Class "Tilesets List") for how to list available tilesets and link to individual tileset resources). Refer to the Requirements Class "Dataset Tilesets" (Requirements Class "Dataset Tilesets") and Requirements Class "GeoData Tilesets" (Requirements Class "GeoData Tilesets") for a description of two mechanisms that associate lists of tilesets to an OGC API landing page for a dataset and to geospatial data (collection) resources respectively. The expectation is that a tileset can be used as a building block in other Web APIs and can be used to provide tiles of different types of data such as maps, features, coverages, or other types of geospatial data that can benefit from tiling.

Response

A successful GET response to a tileset resource is metadata consisting of a data structure with the specific information necessary to build a complete GET request of the tiles representing the geospatial data resource.

identifier

/req/tileset/description

part

The tileset endpoint SHALL support negotiation of an application/json response. In this case, a successful response of an HTTP GET for a specific tileset SHALL be encoded following the data model and JSON schema for tileset metadata, as defined by the OGC Two Dimensional Tile Matrix Set and Tile Set Metadata Standard 2.0.

part

If the tileset endpoint also supports negotiation of an application/xml response, a successful response of an HTTP GET for a specific tileset SHALL be encoded following the data model and XML schema for tileset metadata, as defined by the OGC Two Dimensional Tile Matrix Set and Tile Set Metadata Standard 2.0.

part

If the tileset uses a TileMatrixSet registered in a TileMatrixSet register (e.g. that of the OGC), the tileMatrixSetURI property SHALL link to the registered TileMatrixSet (e.g. http://www.opengis.net/def/tilematrixset/{tileMatrixSet}).

part

The links property SHALL include a link to the TileMatrixSet definition with relation type http://www.opengis.net/def/rel/ogc/1.0/tiling-scheme following the tile matrix set schema, as defined by the OGC Two Dimensional Tile Matrix Set and Tile Set Metadata Standard 2.0.

part

The tileset metadata SHALL include at least one templated link to individual tiles using the relation type item, and the template parameters {tileMatrix}, and {tileRow} and {tileCol}. Those variables are to be substituted by their respective valid values to obtain the URL to a tile.

part

If a tiles link template is specific to a particular format, the link SHALL contain the media type for that format in the "type" property. Otherwise, normal HTTP content type negotiation rules apply (Accept: header).

part

A property templated with a boolean true value SHALL be part of the link properties to indicate that the link needs to be processed to substitute the templated variables with valid values before being used as a URL to a tile.

In addition to the recommendation to include links in the HTTP response headers as specified in OGC API - Common - Part 1, this Standard recommends following the Link-Template HTTP Header Field draft specification, to include Link-Template for templated links, such as the URI for individual tiles.

identifier

/rec/tileset/header-linktemplates

part

The tileset metadata response SHOULD include a Link-Template: in the header following the Link-Template HTTP Header Field draft specification, for example, Link-Template: </ogcapi/collections/blueMarble/map/tiles/GNOSISGlobalGrid/{tileMatrix}/{tileRow}/{tileCol}.png>; rel="item"; type="image/png"; var-base="/ogcapi/vars/" .

part

The templated link in the tileset metadata SHOULD include a varBase, if the implementation additionally supports providing semantic information about the parameters.

See Requirements class "XML Tileset Metadata" for providing an XML representation of the tileset metadata.

Support for alternative encodings for tileset metadata can be added, such as TileJSON.

Currently, use of the TileJSON specification usually implies a WebMercatorQuad TileMatrixSet and the reference to it is implicit. TileJSON version 3 provides an additional mechanism to cite data sources.

Note
The common TileMatrixSets defined in Annex D of OGC 17-083r4 and the variable-width TileMatrixSets defined in Annex E of OGC 17-083r4 are registered in the OGC TileMatrixSets register available from the OGC Definitions Server http://www.opengis.net/def.
identifier

/rec/tileset/bbox

part

The tileset metadata SHOULD populate the bounding box element to describe the tileset extent.

Clients or servers are not required to support a specific default TileMatrixSet.

Note
The OGC TileMatrixSets register is based on the OGC Two Dimensional Tile Matrix Set and Tile Set Metadata standard, version 2.0 (OGC 17-083r4). Refer to Annex D and E for commonly used TileMatrixSets.
Note
When this Requirements Class is used together with the GeoData Tilesets Requirements Class, the geospatial data resource URL is typically the first part of the URL template, but this standard does not mandate this (e.g., the tileset metadata and tiles could be hosted on more affordable object storage).
Example 4. Example fragment of a tileset response for a common TileMatrixSet defined in the OGC TileMatrixSet register
{
  ...
  "tileMatrixSetURI": "http://www.opengis.net/def/tilematrixset/OGC/1.0/WorldMercatorWGS84Quad",
  "dataType": "map",
  "crs": "http://www.opengis.net/def/crs/EPSG/0/3395",
  "links": [
    ...
    {
     "href": "http://data.example.com/collections/buildings/tiles/WorldMercatorWGS84Quad",
     "rel": "self",
     "type": "application/json",
     "title": "Buildings tileset tiled using World Mercator TileMatrixSet"
    },
    {
     "href": "http://schemas.opengis.net/tms/2.0/json/examples/WorldMercatorWGS84Quad.json",
     "rel": "http://www.opengis.net/def/rel/ogc/1.0/tiling-scheme",
     "type": "application/json",
     "title": "Definition of WorldMercatorQuad TileMatrixSet"
    },
    {
     "href": "http://data.example.com/collections/buildings/tiles/WorldMercatorWGS84Quad/{tileMatrix}/{tileRow}/{tileCol}.png",
     "templated": true,
     "rel": "item",
     "type": "image/png",
     "title": "Templated link for retrieving PNG tiles"
    }
   ...
  ],
  "tileMatrixSetLimits":
  [
    { "tileMatrix" : "0", "minTileRow" : 0, "maxTileRow" : 0, "minTileCol" : 0, "maxTileCol" : 0 },
    { "tileMatrix" : "1", "minTileRow" : 0, "maxTileRow" : 0, "minTileCol" : 1, "maxTileCol" : 1 },
    { "tileMatrix" : "2", "minTileRow" : 1, "maxTileRow" : 1, "minTileCol" : 2, "maxTileCol" : 2 },
    { "tileMatrix" : "3", "minTileRow" : 3, "maxTileRow" : 3, "minTileCol" : 4, "maxTileCol" : 4 },
    ...
  ]
}
Note
The use of "templated" is inspired by the JSON Hypertext Application Language (HAL), https://tools.ietf.org/html/draft-kelly-json-hal-08.

The following table explains the meaning of the URI template variables.

Table 9. URI template variables for tiles and valid values
URL template variable Meaning Possible values

TileMatrix

tile matrix identifier

Identifier of the tile matrix (representing a zoom level, a.k.a. a scale) listed in the TileMatrixSet definition

TileRow

row index of tile matrix

A non-negative integer between 0 and the MatrixHeight - 1. If there is a TileMatrixSetLimits the value is limited between MinTileRow and MaxTileRow

TileCol

column index of tile matrix

A non-negative integer between 0 and the MatrixWidth - 1. If there is a TileMatrixSetLimits the value is limited between MinTileCol and MaxTileCol

Example 5. Example fragment of a tileset response for a Web API-defined TileMatrixSet
{
  ...
  "dataType": "map",
  "crs": "http://www.opengis.net/def/crs/EPSG/0/2001",
  "links": [
    ...
    {
     "href": "http://data.example.com/collections/buildings/tiles/CustomAntiguaTMS",
     "rel": "self",
     "type": "application/json",
     "title": "Buildings tileset tiled using custom Antigua TileMatrixSet"
    },
    {
     "href": "http://data.example.com/collections/buildings/tiles/CustomAntiguaTMS/{tileMatrix}/{tileRow}/{tileCol}.png",
     "templated": true,
     "rel": "item",
     "type": "image/png",
     "title": "Templated link for retrieving PNG tiles"
    },
    {
     "href": "http://data.example.com/tileMatrixSets/CustomAntiguaTMS",
     "rel": "http://www.opengis.net/def/rel/ogc/1.0/tiling-scheme",
     "type": "application/json",
     "title": "Definition of custom Antigua TileMatrixSet"
    }
   ...
  ],
  "tileMatrixSetLimits":
  [
    ...
  ]
}

Web API-defined TileMatrixSets

This section provides more details on the recommendations for implementing TileMatrixSets in Web API based servers and client applications. In the future, an extension of this Standard may describe a mechanism to manage (create, update, …​) tiling schemes for a Web application implementing OGC API definitions including OGC API – Tiles Requirements Classes and make some of the recommendations mandatory.

Web API Landing Page

An OGC API landing page provides links to start exploring the resources offered by the Web API. A landing page mainly consists of a list of links. New links for TileMatrixSets on top of the ones defined in OGC API - Common are introduced.

Using the JSON format, the landing page links follow the link schema defined in OGC API - Common. The following is an example fragment of the response to an OGC API - Tiles landing page.

Example 6. Web API Landing Page fragment with links to TileMatrixSet descriptions
{
  "links": [
    ...
    {
      "href": "http://data.example.org/tileMatrixSets?f=json",
      "rel": "http://www.opengis.net/def/rel/ogc/1.0/tiling-schemes",
      "type": "application/json",
      "title": "List of tileMatrixSets implemented by this API in JSON"
    },
    {
      "href": "http://data.example.org/tileMatrixSets?f=html",
      "rel": "http://www.opengis.net/def/rel/ogc/1.0/tiling-schemes",
      "type": "text/html",
      "title": "List of tileMatrixSets implemented by this API in HTML"
    }
  ]
}

TileMatrixSets

An HTTP request to the TileMatrixSets endpoint retrieves a list of links to the descriptions of the tile matrix sets supported by the OGC Web API. They may be the TileMatrixSets defined in Annex D and Annex E of the OGC Two Dimensional Tile Matrix Set and Tile Set Metadata 2.0 Standard, or in customized definitions. The response follows the schema below.

Example 7. Schema for the TileMatrixSets resource
  type: object
  required:
    - tileMatrixSets
  properties:
    tileMatrixSets:
      type: array
      items:
        $ref: '#/components/schemas/id-link'
Example 8. Schema for id-link used to validate TileMatrixSets resource
id-link:
  type: object
  description: |-
    Potentially reusable object that contains an id to a resource and links where the object is described or a representation retrieved. Typically it is useful for paths like `/resources` and `/resources/{resourceId}`. `/resources` responds to an array of id-link listing the `resourceId` and the links to get it. /collections and /collections/{collectionId} in OGC API - Common is an exception to this pattern.
    The fact that `links` is an array can be used to advertise the same object representation in different formats.
  required:
    - id
    - links
  properties:
    id:
      type: string
    uri:
      type: string
      format: uri
      description: If the Tile Matrix Set is registered in an authoritative definitions server, this property should the reference to this definition
    title:
      type: string
    links:
      type: array
      minItems: 1
      items:
        $ref: '#/components/schemas/link'
Example 9. Example for the TileMatrixSets resource
{
  "tileMatrixSets": [
    {
      "id": "MyWebMercatorQuad",
      "uri": "http://www.opengis.net/def/tilematrixset/OGC/1.0/WebMercatorQuad"
      "title": "My Google Maps Compatible for the World",
      "links": [
        {
          "rel": "self",
          "href": "https://data.example.org/tileMatrixSets/MyWebMercatorQuad",
          "type": "application/json",
          "title": "Local definition of WebMercatorQuad TileMatrixSet"
        }
      ]
    }
  ]
}

TileMatrixSet

An HTTP GET request to a TileMatrixSet endpoint retrieves the full description of a tile matrix set supported by Web API based servers and client applications following the schema described in the OGC Two Dimensional Tile Matrix Set and Tile Set Metadata 2.0 Standard. The response follows the TileMatrixSet schema.

Example 10. Fragment of a TileMatrixSet resource example
{
  "title": "My TileMatrixSet for the World",
  "id": "MyTMS",
  "uri": "http://www.opengis.net/def/tilematrixset/OGC/1.0/WebMercatorQuad",
  "crs": "http://www.opengis.net/def/crs/EPSG/0/3857",
  "wellKnownScaleSet": "http://www.opengis.net/def/wkss/OGC/1.0/GoogleMapsCompatible",
  "tileMatrices": [
    ...
    {
      "title": "My zoom level 3",
      "id": "3",
      "scaleDenominator": 69885283.0035897,
      "cellSize": 19567.8792410051,
      "pointOfOrigin": [-20037508.3427892,20037508.3427892],
      "tileWidth": 256,
      "tileHeight": 256,
      "matrixWidth": 8,
      "matrixHeight": 8
    }
    ...
  ]
}

Requirements Class "Tilesets List"

Overview

Example 11. Requirements Class Tilesets List

This class defines a resource called tilesets list that provides a list of elements, each one including a link to an individual tileset resource and a small set of metadata. To obtain a complete definition of the Tileset you should follow the link to the Tileset (in application/json, you will retrieve a TileSetMetadata document; see Requirements Class "TileSet"). Refer to the "Dataset Tilesets" (Requirements Class "Dataset Tilesets") and "GeoData Tilesets" Requirements Class "GeoData Tilesets" requirements classes that describe two complementary mechanisms for associating tilesets lists with datasets and geospatial data resources, respectively.

Tilesets list

A tilesets list resource links to a list of sets of tiles, each one belonging to a particular TileMatrixSet.

Tilesets path

This Class does not specify the full path to a tileset list but requires that it ends with /tiles.

identifier

/req/tilesets-list/tileset-path

part

The API SHALL support a GET operation on a …​/tiles path returning a list of available tilesets

Response

A successful GET response to a list of tilesets resource will respond with a data structure that lists the tileset URLs available (one for each Tile Matrix Set supported).

Example 12. Example of a tilesets list response
{
  "tilesets": [
    ...
    {
      "title" : "Buildings (WebMercatorQuad)",
      "tileMatrixSetURI" : "http://www.opengis.net/def/tilematrixset/OGC/1.0/WebMercatorQuad",
      "crs" : "http://www.opengis.net/def/crs/EPSG/0/3857",
      "dataType" : "vector",
      "links" : [
         {
           "rel": "self",
           "href": "http://data.example.com/collections/buildings/tiles/WebMercatorQuad",
           "type": "application/json"
         },
         {
           "rel": "http://www.opengis.net/def/rel/ogc/1.0/tiling-scheme",
           "href": "http://data.example.com/tileMatrixSets/WebMercatorQuad",
           "type": "application/json"
         }
      ]
   }
   ...
  ]
}
identifier

/rec/tilesets-list/tileset_title

part

The tilesets array metadata (as defined by the 2D Tile Matrix Set and Tile Set Metadata standard) subset SHOULD include a short human readable title.

identifier

/per/tilesets-list/tilesets-api

part

An API document can advertise a single resource path (expressed as a URI template) to get multiple tilesets.

part

This URI template will use the {tileMatrixSetId} variable. The {tileMatrixSetId} variable will be interpreted as one of TileMatrixSet identifiers supported by the resource. In other words, the URI template represents all the TileMatrixSets supported by the resource. Note that a {tileMatrixSetId} variable must NOT be used in the templated links of the tileset metadata.

Requirements Class "Dataset Tilesets"

Overview

The Dataset Tilesets Requirements Class defines a mechanism to retrieve a list of tilesets for a dataset (a.k.a., a root resource) which may contain multiple geospatial data resources. This Class is used in conjunction with the Requirements Class "Tilesets List" (Requirements Class "Tilesets List") that specifies the response to this GET request.

Combined with the Requirements Class "Collections Selection" (Requirements Class "Collections Selection"), selecting specific geospatial data resources (collections) to be combined and retrieved as tiles is possible. For retrieving the list of tilesets for only one collection, the Requirements Class "Geodata Tilesets" (Requirements Class "GeoData Tilesets") can also be used if it is implemented.

If an OGC based Web API offers several geospatial data resources for a dataset, that API may limit the number of collections that can be retrieved together, and/or provide a limited subset of the collections by default.

General

This Requirements Class describes how to serve tilesets for a dataset provided as a Web API instance implementing OGC API - Common - Part 1 requirements classes or OGC API - Features - Part 1: Core, version 1.0 as an alternative.

Web API Landing Page

The landing page provides links to start exploring the resources offered by the Web API. The landing page mainly consists of a list of links to root resources. This Requirements Class requires including in the landing page one or more link(s) to list(s) of tilesets available for the dataset.

Response

identifier

/req/dataset-tilesets/landingpage

part

If the API has a mechanism for exposing root resources (e.g., a landing page), the API SHALL advertise at least one URI to retrieve a tilesets list provided by this service with a link having a rel value: http://www.opengis.net/def/rel/ogc/1.0/tilesets-vector, http://www.opengis.net/def/rel/ogc/1.0/tilesets-map or http://www.opengis.net/def/rel/ogc/1.0/tilesets-coverage.

In the landing page, in JSON format, the links follow the link schema defined in the OGC API - Common - Part 1: Core or in OGC API - Features - Part 1: Core 1.0. The example below shows a fragment of the response to an OGC API - Tiles landing page showing links to dataset tilesets.

Example 14. Web API Landing Page fragment that advertises dataset tilesets
{
  "links": [
    ...
    {
       "href": "http://data.example.org/tiles",
       "rel": "http://www.opengis.net/def/rel/ogc/1.0/tilesets-vector",
       "type": "application/json",
       "title": "List of available vector features tilesets for the dataset"
    },
    {
       "href": "http://data.example.org/tiles",
       "rel": "http://www.opengis.net/def/rel/ogc/1.0/tilesets-map",
       "type": "application/json",
       "title": "List of available map tilesets for the dataset"
    }
  ]
}
identifier

/rec/dataset-tilesets/landingpage

part

The URI to the dataset tilesets will be /tiles.

Dataset tilesets

The dataset tilesets operation provides essential tileset metadata and links to tilesets resources that support requesting tiles from the dataset.

Operation

identifier

/req/dataset-tilesets/operation

part

The dataset resource (the root resource) SHALL have at least one tileset accessible at …​/tiles supporting an HTTP GET operation.

part

The URI SHALL be composed of two parts: The initial part is the URI of the dataset resource (the root resource) that can be represented as tiles and the final part follows the pattern /tiles.

The request of this operation has no parameters.

Response

A successful response to a dataset tilesets list request is a list of tilesets as defined by the Requirements Class "Tileset List" (Requirements Class "Tilesets List") and the Requirements Class "Tileset" (Requirements Class "TileSet").

Tiles

The Requirements Class "Core" (Requirements Class "Core") defines how to retrieve a single tile from a tileset available for the dataset.

Response

The response is expected to represent the entire dataset. In a server providing access through a Web API to a complex dataset formed by several geospatial data resources, it can be useful to select specific sub-resources of interest when requesting data from this dataset. This can be achieved with the use of the Requirements Class "Collections Selection" (Requirements Class "Collections Selection") or as an automatic decision by the server.

identifier

/rec/dataset-tilesets/geodata-selection

part

When it is possible and sensible, all geospatial data resources (/collections) SHOULD be represented in the tiles.

identifier

/per/dataset-tilesets/geodata-selection

part

If it is not possible and sensible to represent all geospatial data resources (/collections) in tiles (e.g., it compromises performance or tiles are overcrowded with too many elements), the server MAY select only the most significant geospatial data resources.

Requirements Class "GeoData Tilesets"

Overview

The GeoData Tilesets Requirements Class assumes that data is organized into one or more geospatial data resources (e.g., the "collections" OGC API - Common - Part 2: Geospatial Data). Geospatial data resources are referenced using URIs.

The GeoData Tilesets Class defines how to specify link(s) to one or more list(s) of tilesets containing a representation of this geospatial data resource (path). This Class is used in conjunction with Requirements Class "Tilesets List" that specifies the response to this GET request.

General

identifier

/rec/geodata-tilesets/api-common

part

An implementation of this Standard SHOULD consider implementing the requirements specified in the http://www.opengis.net/spec/ogcapi-common-1/1.0/req/core (OGC API - Common - Part 1 version 1.0).

This Requirements Class depends on OGC API - Common - Part 2: Geospatial Data, but stays flexible and does not require implementation of OGC API - Common - Part 1. This allows for other Web API architectures outside the OGC API framework to adopt this Class. However, a server implementing other OGC API Standards is expected to implement OGC API - Common - Part 1. In practice, this means that the landing page and the conformance page follow OGC API - Common core requirements classes when used. Combining this building block with OGC API - Features - Part 1: Core, version 1.0 instead of OGC API - Common - Part 2 is also possible.

Geospatial data resources

This Standard does not specify how geospatial data resources are exposed in a server that implements OGC API Standards and whether they can be retrieved as geospatial data (e.g., feature items). For example, OGC API - Features - Part 1: Core, version 1.0 includes the definition of collections and each collection is available in the /collections/{collectionId} path. OGC API - Common will provide a similar mechanism. Other paths in the Web API could also give access to geospatial data resources.

Note
The concept of geospatial data resource path replaces the concept of "layer" found in WMTS 1.0 but is intended to result in a better integration between data visualization and data access.

For example, an implementation of the OGC API - Features - Part 1: Core Standard returns a list of links that include geospatial resource aspects for each geospatial data resource in the /collections/{collectionId} path. OGC API - Common - Part 2: Geospatial Data provides a similar mechanism. In the JSON response, the links array is where links to lists of tilesets must be added.

Example 16. Fragment of a collection with a links array including two items pointing to lists of tilesets (one for vector tiles and one for map tiles).
[
  ...
  {
    "id": "buildings",
    "title": "Buildings in the city of Bonn",
    "description": "This collection contains buildings",
    "attribution": "OpenStreetMap",
    "extent": {
      ...
    }
    "links": [
      ...
      {
        "href": "http://data.example.com/collections/buildings/tiles",
        "rel": "http://www.opengis.net/def/rel/ogc/1.0/tilesets-vector",
        "type": "application/json",
        "title": "List of available vector tilesets for the collection of Bonn buildings"
      },
      {
        "href": "http://data.example.com/collections/buildings/tiles",
        "rel": "http://www.opengis.net/def/rel/ogc/1.0/tilesets-map",
        "type": "application/json",
        "title": "List of available map tilesets for the collection of Bonn buildings"
      }
    ]
  }
  ...
]

Geospatial data resources tilesets list

The geospatial data resource tilesets operation provides essential tileset metadata and links to tilesets resources that support requesting tiles from the resource.

Operation

identifier

/req/geodata-tilesets/operation

part

The geospatial data resource SHALL have an associated list of at least one tileset accessible at …​/tiles supporting an HTTP GET operation.

part

The URI SHALL be composed of two parts: The initial part is the URI of the geospatial data resource that can be represented as tiles and the final part follows the pattern /tiles.

This standard does not specify the need for any additional query parameter in the GET request.

Response

A successful response to a geospatial data tilesets request is a list of tilesets as defined by the Requirements Class "Tilesets List" and Requirements Class "TileSet".

Tiles

A tile resource is a fragment of a larger single geospatial data resource that is spatially constrained at the boundaries of the selected tile in a tile matrix set. Details of the operation are described in the Requirements Class "Core".

Requirements Class "Collections Selection"

Overview

Example 17. Requirements Class Collections Selection

In a server providing access through a Web API to a complex dataset formed by several geospatial data resources, selecting specific sub-resources of interest when requesting data from this dataset can be useful. This requirements class defines how to include a query parameter when requesting a resource (e.g., dataset tiles) to specify which geospatial data resources (a.k.a. collections) should be used to generate the response.

This Requirements Class can be implemented e.g. in conjunction with the Requirements Class "Dataset Tilesets" (Requirements Class "Dataset Tilesets") or in conjunction with an equivalent requirements class from OGC API - Maps.

Operation

By default, the geospatial data resources to be included in the dataset tiles responses are unspecified but should represent the entire dataset. This Class adds a mechanism to select the geospatial data resources to be used to generate the derived resources (e.g., maps or tiles). In practice this enables the capability to generate resources involving more than one geospatial data sub-resource.

Parameter collections

An operation that acts on a resource consisting of multiple geospatial data sub-resources (e.g., a resource derived from a root dataset) SHALL support an optional parameter collections with the following characteristics (shown as OpenAPI Specification 3.0 fragment)

  name: collections
  in: query
  required: false
  style: form
  explode: false
  schema:
    type: array
    items:
      type: string

The parameter collections SHALL be supported by tileset resources and tiles resources for origins consisting of multiple geospatial data sub-resources (e.g., dataset tileset at {datasetAPI}/tiles/WebMercatorQuad and dataset tiles at {datasetAPI}/tiles/WebMercatorQuad/{tileMatrix}/{tileRow}/{tileCol}).

Implementations SHALL support a comma-separated list of either geospatial resource identifiers (e.g., collectionId’s) and/or full URLs to geospatial resource identifiers.

When this parameter refers to more than one geospatial data resource, this parameter will use the comma (",") as the separator between the resource identifiers in the list. Additional white space will not be used to delimit list items. If a geospatial data resource identifier includes a space or comma, it shall be escaped using the URL encoding rules (IETF RFC 2396).

identifier

/per/collections-selection/valid-collections

part

An implementation MAY return an error when the specified list of collections is not supported, for reasons such as an incompatible combination, or an unsupported encoding or TileMatrixSet for some of the selected collections.

Response

identifier

/req/collections-selection/collections-response

part

Only the collections of geospatial data enumerated in the values of the collections parameter SHALL be used to generate the responses for the resources (tiles and tilesets) to which they apply.

part

If there is more than one collection name and the style applied does not specify otherwise, the comma-separated collections SHALL be included in the result starting by the first (leftmost) and ending by the last (rightmost).

Note
For tiles representing maps, sub-requirement B will result in the first collection being portrayed at the bottom of the display with the others rendered on top of the previous ones, one by one (the collection mentioned rightmost in the collections parameter will become topmost in the portrayal).

Error conditions

If the value of the parameter collections contains a resource id of URI that does not exist in the Web API implementation, the status code of the response is 400.

If the value of the parameter collections has a wrong format or combines one or more geospatial data resources that are not compatible (e.g., they do not have a compatible value specified by other parameters in the request), the status code of the response is 400.

Requirements Class "DateTime"

Overview

Example 18. Requirements Class Datetime

The DateTime Requirements Class defines the way date and time can be used as a parameter to filter the content in the tile resource. This Requirements Class imports most of the functionality from OGC API - Commons.

Describing the temporal extent

Depending on the type of resource, the way the temporal extent and the resolution of the datetime values available for the client to request are described may be different:

  • For Geodata Tilesets, the collection description should specify the temporal extent of the resources. Tiles can be requested inside this extent. If the extent is specified in a way that instant values are provided (e.g. by listing them or by including a resolution), then it may be possible to request tiles for these instants.

  • If tileset metadata is available, a future revision of the 2D Tile Matrix Set and Tile Set Metadata Standard could take precedence providing more details on the available values for datetime.

datetime query parameter request and response

This section is based on the OGC API - Common datetime module that is entirely reproduced here.

Requirements Module

http://www.opengis.net/spec/ogcapi-common-2/1.0/rm/datetime

Target type

Web API Query Parameter

The datetime parameter selects resources based on their temporal extent. The definition of temporal extent is specific to the resource type being filtered.

The datetime parameter is defined as follows:

The datetime parameter SHALL have the following characteristics (using an OpenAPI Specification 3.0 fragment):

name: datetime
in: query
required: false
schema:
  type: string
style: form
explode: false

Temporal geometries are either a date-time value or a time interval. The parameter value SHALL conform to the following syntax (using ABNF):

interval-closed     = date-time "/" date-time
interval-open-start = [".."] "/" date-time
interval-open-end   = date-time "/" [".."]
interval            = interval-closed / interval-open-start / interval-open-end
datetime            = date-time / interval

The syntax of date-time is specified by RFC 3339, 5.6.

Open ranges in time intervals at the start or end are supported using a double-dot (..) or an empty string for the start/end.

While the processing of the datetime parameter is specific to the resource and operation for which it is applied, there is a general set of requirements which all implementations must address.

identifier

/req/collections/rc-datetime-response

part

If the datetime parameter is provided by the client and supported by the server, then only resources that have a temporal geometry that intersects the temporal information in the datetime parameter SHALL be part of the result set. If a resource has multiple temporal properties, it is the decision of the server whether only a single temporal property is used to determine the extent or all relevant temporal properties.

part

The datetime parameter SHALL match all resources in the collection that are not associated with a temporal geometry.

"Intersects" means that the time (instant or period) specified in the parameter datetime includes a timestamp that is part of the temporal geometry of the resource (again, a time instant or period). For time periods this includes the start and end time.

Table 10. A note about ISO 8601-2

Note

ISO 8601-2 distinguishes open start/end timestamps (double-dot) and unknown start/end timestamps (empty string). For queries, an unknown start/end has the same effect as an open start/end.

Example 19. A date-time

February 12, 2018, 23:20:52 UTC:

datetime=2018-02-12T23%3A20%3A52Z

For resources with a temporal property that is a timestamp (like lastUpdate), a date-time value would match all resources where the temporal property is identical.

For resources with a temporal property that is a date or a time interval, a date-time value would match all resources where the timestamp is on that day or within the time interval.

Example 20. Intervals

February 12, 2018, 00:00:00 UTC to March 18, 2018, 12:31:12 UTC:

datetime=2018-02-12T00%3A00%3A00Z%2F2018-03-18T12%3A31%3A12Z

February 12, 2018, 00:00:00 UTC or later:

datetime=2018-02-12T00%3A00%3A00Z%2F..

March 18, 2018, 12:31:12 UTC or earlier:

datetime=..%2F2018-03-18T12%3A31%3A12Z

A template for the definition of the parameter in YAML according to OpenAPI 3.0 is available at datetime.yaml.

subset=datetime query parameter request and response

The behavior of the subset parameter is imported from the OGC API - Common subset module. The entire module is reproduced here. However, some considerations may not apply for datetime and the generic behavior is limited by predetermining the axis name of the generic datetime in an additional requirement, a permission and a recommendation at the end of this subsection.

Requirements Module

http://www.opengis.net/spec/ogcapi-common-2/1.0/rm/subset

Target type

Web API Query Parameter

The subset parameter is used to select a subset of a geospatial resource.

The subset parameter is defined as follows:

The subset parameter SHALL have the following characteristics (using an Augmented Backus Naur Form (ABNF) fragment):

  SubsetSpec:       "subset"=axisName(intervalOrPoint)
  axisName:         {text}
  intervalOrPoint:  interval \| point
  interval:         low : high
  low:              point \| *
  high:             point \| *
  point:            {number} \| "{text}"

  Where:
     \" = double quote = ASCII code 0x42,
     {number} is an integer or floating-point number, and
     {text} is some general ASCII text (such as a time and date notation in ISO 8601).

The axis name SHALL correspond to one of the axes of the Coordinate Reference System (CRS) of the target resource or else return a 400 status code.

If the intervalOrPoint values fall entirely outside the range of valid values defined for the identified axis, a 204 status code SHALL be returned.

For a CRS where an axis can wrap around, such as subsetting across the dateline (anti-meridian) in a geographic CRS, a low value greater than high SHALL be supported to indicate an extent crossing that wrapping point.

Note
When the intervalOrPoint values fall partially outside of the range of valid values defined by the CRS for the identified axis, the service is expected to return the non-empty portion of the resource resulting from the subset.

While the processing of the subset parameter is specific to the resource and operation for which it is applied, there is a general set of requirements which all implementations must address.

identifier

/req/collections/rc-subset-response

part

Only that part of the resource that falls within the bounds of the subset expression SHALL be returned.

part

If a lower limit of the subset expression is populated with an asterisk "*" THEN the minimum extent of the resource along that axis SHALL be selected.

part

If an upper limit of the subset expression is populated with an asterisk "*" THEN the maximum extent of the resource along that axis SHALL be selected.

identifier

/req/datetime/axis

part

To subset a generic time dimension, the server SHALL support "datetime" as axis name in the subset parameter

Example 21. A date-time (subset)

February 12, 2018, 23:20:52 UTC:

subset=datetime(%222018-02-12T23%3A20%3A52Z%22)

For resources with a temporal property that is a timestamp (like lastUpdate), a date-time value would match all resources where the temporal property is identical.

For resources with a temporal property that is a date or a time interval, a date-time value would match all resources where the timestamp is on that day or within the time interval.

Example 22. Intervals (subset)

February 12, 2018, 00:00:00 UTC to March 18, 2018, 12:31:12 UTC:

subset=datetime(%222018-02-12T00%3A00%3A00Z%22%3A%222018-03-18T12%3A31%3A12Z%22)

February 12, 2018, 00:00:00 UTC or later:

subset=datetime(%222018-02-12T00%3A00%3A00Z%22%3A*)

March 18, 2018, 12:31:12 UTC or earlier:

subset=datetime(*%3A%222018-03-18T12%3A31%3A12Z%22)

Actual date & time response header

The server SHOULD add an HTTP header with OGCAPI-datetime as a name and a temporal geometry as a value, to indicate the instant or the temporal interval of the content of the resource. The temporal geometries value shall conform to the following syntax (using ABNF):

interval     = instant "/" instant
datetime     = instant / interval

The syntax of instant is specified by RFC 3339, 5.6.

Closest date & time permission

identifier

/per/datetime/closest

part

In case the requested tile is not available in the exact requested datetime for the tile matrix, tile column and tile row, the closest or last previous time for which data is available MAY be returned by the server.

Note
An Earth Observation use case where this permission is useful is to allow retrieving a tile of the last datetime where imagery is available while taking into account that a certain geographic area may only be observed at an interval of "every few days" and availability may be irregular and conditioned by clouds.

Requirements Class "OpenAPI Specification 3.0"

Overview

Example 23. Requirements Class OpenAPI 3.0

The OpenAPI 3.0 Requirements Class details providing a definition of a Web API implementing the OGC API - Tiles Standard using the OpenAPI Specification version 3.0.

Web API OpenAPI description

The OpenAPI definition provides a description of the complete list of API resources. Reading this description, an application would have the full picture of the resources that the API provides, how to retrieve them, and what responses are expected for successful and unsuccessful requests. Without this API description an application would be forced to traverse all links, starting with the landing page, to get an equivalent full list of resources.

The (oas30) requirement class from OGC API - Common - Part 1: Core provides many details on general requirements that this requirements class adopts by dependency. In addition, extra requirements are provided. Also, the OGC API - Common requirements class provides details on how to request an API definition.

Response

Completeness

The OpenAPI definition resulting as a response of this request needs to take into consideration the relevant resources specified in this standard.

identifier

/req/oas30/completeness

part

The OpenAPI definition SHALL provide paths for all tileset, tilesets list and tile resources provided by the API instance

part

The paths defined in the OpenAPI definition SHALL be consistent with the links to the same resources provided by the landing page, collections, tileset and tilesets list resources.

part

The paths defined in the OpenAPI definition SHALL provide the description of the parameters that the tileset and tile resources need to operate that are specified in corresponding conformance classes

Reusable API components

Reusable components for creating OpenAPI definitions for implementations of this OGC API can be found in http://schemas.opengis.net/ogcapi/tiles/part1/1.0/openapi

A server implementation of the OGC API - Tiles Standard can use the content in the openapi folder in https://schemas.opengis.net/ogcapi/tiles/part1/1.0 to generate a response for the openapi description. The ogcapi-tiles-1.yaml file includes paths and components. An implementation should only include the paths that are implemented and remove the references to the rest. The components part includes parameters, responses and schemas that can be reused as-is. The api folder (https://schemas.opengis.net/ogcapi/tiles/part1/1.0/openapi/api/) contains JSON files that are templates with enumerated values for collections (all, coverages or vector), styles, tileMatrixSets. A particular implementation of this API should enumerate the actual resources exposed by the API in the same way. The server can select to dynamically implement responses to /api/* (where * is replaced by all-collections, styles, …​ ) or hardcode the /api/* files with the actual list of resource identifiers in the enumerations.

To improve performance, the whole content of this folder can be bundled into a single document by executing a tool such as swagger-cli. This can be served for the OGC API - Common - Part 1 service-desc link from the landing page.

Path Operation Ids

The OpenAPI definition provides to a client application a set of paths that the client can use to interact with the API and get new resources. The OpenAPI description of each path provides a description of what parameters to use in the request and what to expect in the response. However, this standard is not proposing a fixed set of paths so there is an issue identifying the requirements classes pertaining to each path in an API instance. In other words, the OpenAPI description alone does not provide enough information by itself and there is a need to identify the requirements classes pertaining to a resource (a path) and complete the information necessary for the client to implement the necessary logic to generate the request and understand the response. This standard proposes a suffix mechanism to be applied to the operationId property of the path to list the requirement classes pertaining to each path. Each path should have a unique operationId suffix, so it is expected that the OpenAPI instance provides a prefix to the proposed suffixes that make each operationId unique.

identifier

/req/oas30/operation-id

part

The paths defined in the OpenAPI definition SHALL have an operationId value ending with the relevant dot-separated suffix corresponding to the resource as specified in Table 10.

Table 11. OpenAPI operationId suffixes
Origin Styled Data Type Resource operationId suffixes1

With the resource types and origins described in this document

DataSet6

Vector

TileSetsList5

.dataset.vector.getTileSetsList

DataSet6

Vector

TileSet4

.dataset.vector.getTileSet

DataSet6

Vector

Tile3

.dataset.vector.getTile

DataSet6

Styled8

Vector

TileSetsList5

.dataset.style.vector.getTileSetsList

DataSet6

Styled8

Vector

TileSet4

.dataset.style.vector.getTileSet

DataSet6

Styled8

Vector

Tile3

.dataset.style.vector.getTile

DataSet6

Map10

TileSetsList5

.dataset.map.getTileSetsList

DataSet6

Map10

TileSet4

.dataset.map.getTileSet

DataSet6

Map10

Tile3

.dataset.map.getTile

DataSet6

Styled8

Map10

TileSetsList5

.dataset.style.map.getTileSetsList

DataSet6

Styled8

Map10

TileSet4

.dataset.style.map.getTileSet

DataSet6

Styled8

Map10

Tile3

.dataset.style.map.getTile

Collection7

Vector

TileSetsList5

.collection.vector.getTileSetsList

Collection7

Vector

TileSet4

.collection.vector.getTileSet

Collection7

Vector

Tile3

.collection.vector.getTile

Collection7

Styled8

Vector

TileSetsList5

.collection.style.vector.getTileSetsList

Collection7

Styled8

Vector

TileSet4

.collection.style.vector.getTileSet

Collection7

Styled8

Vector

Tile3

.collection.style.vector.getTile

Collection7

Coverage9

TileSetsList5

.collection.coverage.getTileSetsList

Collection7

Coverage9

TileSet4

.collection.coverage.getTileSet

Collection7

Coverage9

Tile3

.collection.coverage.getTile

Collection7

Map10

TileSetsList5

.collection.map.getTileSetsList

Collection7

Map10

TileSet4

.collection.map.getTileSet

Collection7

Map10

Tile3

.collection.map.getTile

Collection7

Styled8

Map10

TileSetsList5

.collection.style.map.getTileSetsList

Collection7

Styled8

Map10

TileSet4

.collection.style.map.getTileSet

Collection7

Styled8

Map10

Tile3

.collection.style.map.getTile

With other potential resource types

DataSet6

other

TileSetsList5

.dataset.*.getTileSetsList

DataSet6

other

TileSet4

.dataset.*.getTileSet

DataSet6

other

Tile3

.dataset.*.getTile

DataSet6

Styled8

other

TileSetsList5

.dataset.style.*.getTileSetsList

DataSet6

Styled8

other

TileSet4

.dataset.style.*.getTileSet

DataSet6

Styled8

other

Tile3

.dataset.style.*.getTile

Collection7

other

TileSetsList5

.collection.*.getTileSetsList

Collection7

other

TileSet4

.collection.*.getTileSet

Collection7

other

Tile3

.collection.*.getTile

Collection7

Styled8

other

TileSetsList5

.collection.style.*.getTileSetsList

Collection7

Styled8

other

TileSet4

.collection.style.*.getTileSet

Collection7

Styled8

other

Tile3

.collection.style.*.getTile

With other potential origins

other

Vector

TileSetsList5

#.vector.getTileSetsList

other

Vector

TileSet4

#.vector.getTileSet

other

Vector

Tile3

#.vector.getTile

other

Styled8

Vector

TileSetsList5

#.style.vector.getTileSetsList

other

Styled8

Vector

TileSet4

#.style.vector.getTileSet

other

Styled8

Vector

Tile3

#.style.vector.getTile

other

Coverage9

TileSetsList5

#.coverage.getTileSetsList

other

Coverage9

TileSet4

#.coverage.getTileSet

other

Coverage9

Tile3

#.coverage.getTile

other

Map10

TileSetsList5

#.map.getTileSetsList

other

Map10

TileSet4

#.map.getTileSet

other

Map10

Tile3

#.map.getTile

other

Styled8

Map10

TileSetsList5

#.style.map.getTileSetsList

other

Styled8

Map10

TileSet4

#.style.map.getTileSet

other

Styled8

Map10

Tile3

#.style.map.getTile

other

other

TileSetsList5

#.*.getTileSetsList

other

other

TileSet4

#.*.getTileSet

other

other

Tile3

#.*.getTile

other

Styled8

other

TileSetsList5

#.style.*.getTileSetsList

other

Styled8

other

TileSet4

#.style.*.getTileSet

other

Styled8

other

Tile3

#.style.*.getTile`

1 '*' represents a resource type to be defined in another relevant standard. '#' represents an optional origin that could be defined in another relevant standard.

2 The suffixes derived from these resource types are not required by this standard and will be proposed by the relevant standard defining them.

3 The Tile resource is defined in Requirements Class "Core".

4 The TileSet resource is defined in Requirements Class "TileSet".

5 The TileSetsList resource is defined in Requirements Class "Tilesets List".

6 The DataSet origin is defined in Requirements Class "Dataset Tilesets" Requirements Class "Dataset Tilesets" and depends on OGC API - Common - Part 1: Core.

7 The Collection origin is defined in Requirements Class "GeoData Tilesets" Requirements Class "GeoData Tilesets" and depends on the Collections requirements class defined in OGC API - Common - Part 2: Geospatial data

8 Styled tilesets rely on the ability to list styles defined in OGC API - Styles2.

9 Coverage tilesets rely on the Coverage tiles conformance class defined in OGC API - Coverages - Part 1: Core2.

10 Map tilesets rely on the Map tiles conformance class defined in OGC API - Maps - Part 1: Core2.

Requirements class "XML Tileset Metadata"

Overview

The OGC API - Tiles Standard provides several resources describing the service (landing page), the geospatial data resources, the tileset lists and the tilesets informing the client on how to retrieve tiled data. XML is a data-interchange format designed to facilitate structured data interchange between applications. The intention of this section is to define an XML encoding that could be implemented by Web APIs that implement OGC API - Tiles, but not to exclude the possibility of defining additional metadata encodings that may be offered by the Web APIs. Indeed, Web API implementations may adopt this XML requirements class and declare conformance to it in the list of conformance classes supported by the Web API. The declaration of XML in the conformance classes supported does not mean that all the resources provided by the Web API support an XML representation, but a general support of XML is expected.

This clause specifies a requirements class for an XML representation that may be implemented by a Web API, that implements OGC API - Tiles, for the tilesets list and a tileset resources in addition to the JSON representation required by Requirements Class "TileSet" and Requirements Class "Tilesets List".

If the service provides local TileMatrixSet definitions, it is recommended that those resources also support an XML representation conforming to the XML schema specified in the OGC Two Dimensional Tile Matrix Set and Tile Set Metadata 2.0 standard.

Please refer to OGC API - Common conformance classes defining the XML representation of common resources such as the landing page, conformance and collections.

TileSet and TileSets List XML representation

Operation

identifier

/req/xml/definition

part

200-responses of the server SHALL support the application/xml media type for the Tilesets list and TileSet resources.

Response

Every request to a TileSets list or TileSet resource which:

  1. Receives a 200-response

  2. with the Content-Type header set to application/xml

SHALL include, or link to, a payload encoded according to the Extensible Markup Language (XML) 1.0

The payload for these responses SHALL conform with the XML Schema specified for the resource in the OGC 17-083r4: OGC Two Dimensional Tile Matrix Set and Tile Set Metadata.

Requirements classes for tile encodings

The OGC API - Tiles Standard is designed to support tiling data that can potentially be encoded and provided in many of the existing geospatial formats or new ones that could be invented in the future. Web API implementations may adopt these encodings and declare conformance to them in the list of conformance classes supported by the Web API. The intention of this section is NOT to limit the number of encodings offered by an implementation of OGC API - Tiles but to provide a minimum set of encodings that could be implemented by Web APIs that implement this Standard, as well as to provide a practical way to test conformance to this Standard. For each of these encodings, a Requirements Class is defined. Web API implementations are free to support other encodings and data formats that can be convenient in each case and use them even though they may not be listed as supported conformance classes by the Web API. In addition, the declaration of an encoding in the conformance classes supported does not mean that all the resources provided by the Web API should support all of them. Partial support could be determined by the differences in the nature of the data behind each collection.

Overview

This clause specifies six pre-defined requirements classes for encodings to be used by the tiles of the OGC API implementation:

Note
None of the encodings specified here is mandatory and an implementation of this standard may implement none of them but implement other encodings instead.

Requirements Class "PNG"

One fundamental use case for tiled geospatial content is visualization in a web browser. For this use case, selecting an encoding that can be natively interpreted by the web browser is fundamental. The PNG format is one of the most popular formats on the World Wide Web. The format is defined by the ISO Information technology — Computer graphics and image processing — Portable Network Graphics (PNG): Functional specification (ISO/IEC 15948:2004), which is also available as a W3C Recommendation at https://www.w3.org/TR/PNG. Note that the standard is listed as ISO/IEC 15948:2003 on the W3C Recommendation.

PNG supports lossless data compression. PNG supports palette-based images (with palettes of 24-bit RGB or 32-bit RGBA colors), grayscale images (with or without an alpha channel for transparency), and full-color non-palette-based RGB or RGBA images. The PNG working group designed the format for transferring images on the Internet, not for professional-quality print graphics. Therefore non-RGB color spaces such as CMYK are not supported.

identifier

/req/png/content

part

Every 200-response of the server with the media type image/png SHALL be a PNG image representing only one tile

part

The colors of the PNG SHALL represent the geospatial features or coverage values in the tile.

part

The alpha channel of the PNG SHALL be used when partial transparency is required

part

All tiles representing parts of the same resource or resources and using the same style SHALL follow the same portrayal rules

Note
The way colors in a PNG image are mapped to geospatial features or coverage values is out of scope of this Standard. However, a common set of portrayal rules for all tiles representing part of the same resource is essential, as adjacent tiles are normally represented one next to the other and presented as a single image to the user.

Requirements Class "JPEG"

As above, selecting an encoding that can be natively interpreted by the web browser is fundamental. The JPEG format is one of the most popular formats on the World Wide Web and is defined by the ITU-T Recommendation T.81 and the ISO/IEC 10918-1 standard.

The JPEG compression algorithm operates at its best on photographs and paintings with smooth variations of tone and color. JPEG is best used for color and grayscale still images, but not for binary images. JPEG is also the most common format used by digital cameras to encode and store pictures. However, JPEG is not well suited for line drawings and other textual or iconic graphics, where the sharp contrasts between adjacent pixels can cause noticeable artifacts. Such images are better saved in a lossless graphics format such as PNG. Because JPEG is a lossy compression method, which reduces the image fidelity, it is inappropriate for exact reproduction of imaging data.

identifier

/req/jpeg/content

part

Every 200-response of the server with the media type image/jpeg SHALL be a JPEG document representing only one tile

part

The colors of the JPEG SHALL represent coverage values in the tile.

part

All tiles representing parts of the same resource or resources and using the same style SHALL follow the same portrayal rules

Note
The way the colors in a JPEG image are mapped to geospatial features or coverage values is out of scope of this standard. However, a common set of portrayal rules for all tiles representing part of the same resource is essential, as adjacent tiles are normally represented one next to the other and presented as a single image to the user.
Note
The use of JPEG to represent linear features or color solid polygons is not recommended.

Requirements Class "TIFF"

One use case for tiles is to distribute fragmented coverage values as regular grids. In these circumstances, selecting an encoding that can store grid values in their original format and eventually compress them using lossless compression is the right solution. The TIFF format is one of the older formats but still is one of the most popular formats to preserve arrays of data values. The format is defined by the TIFF v6 specification, which is owned by Adobe Systems.

TIFF is a flexible, adaptable file format for handling images and data. The ability to store data in a lossless format makes a TIFF file a useful image archive. This is because, unlike standard JPEG files, a TIFF file can use lossless compression methods such as PackBits or LZW compression.

Example 27. Requirements Class TIFF
identifier

/req/tiff/content

part

Every 200-response of the server with the media type image/tiff SHALL be a TIFF document representing only one tile

part

The TIFF file SHALL be organized in strips (avoiding organization in internal tiles).

part

All tiles representing parts of the same resource or resources and using the same style SHALL follow the same portrayal rules or represent data with the same reference and units of measure.

Note
TIFF is an ideal format for storing geospatial grid data with its original data values. However, TIFF can also be used for image palette or RGB imagery.
identifier

/rec/tiff/geotiff

part

A TIFF encoding SHOULD include georeference information in GeoTIFF format, and conforming to the OGC GeoTIFF 1.1 Standard (OGC 19-008r4)

identifier

/req/tiff/geotiff

part

If the TIFF encoding incorporates a GeoTIFF georeference, this information SHALL be consistent with the TileMatrixSet, TileMatrix, TileRow and TileCol

Requirements Class "NetCDF"

In the case of multidimensional regular grid tiles, as defined in Annex J of the 2D TMS Standard [OGC 17-083r4], there is a need for a format that can store multidimensional data in a natural way. The NetCDF format is one of the most popular formats for scientific data that is able to store multi-dimensional arrays of data values. NetCDF format is defined by the UCAR-Unidata community and standardized in the OGC Network Common Data Form (NetCDF) Core Encoding Standard version 1.0 (OGC 10-090r3).

identifier

/req/netcdf/content

part

Every 200-response of the server with the media type application/netcdf or application/x-netcdf SHALL be a NetCDF document representing only one tile

part

The NetCDF file SHALL contain only data in two or more dimensions

identifier

/req/netcdf/geo

part

If the NetCDF encoding incorporates a georeference, this information SHALL be consistent with the TileMatrixSet, TileMatrix, TileRow and TileCol

Requirements Class "GeoJSON"

GeoJSON is a commonly used format for representing features with simple geometries and related properties. GeoJSON is simple to understand and well supported by tools and software libraries. Since most Web developers are comfortable with using JSON-based formats, supporting GeoJSON is recommended for vector tiles. The caveat is whether the feature data can be represented in GeoJSON for the intended use.

Example 29. Requirements Class GeoJSON

Every 200-response of the server with the media type application/geo+json SHALL be a GeoJSON document representing only one tile.

The root of the GeoJSON document SHALL be:

  • A GeoJSON FeatureCollection Object for features.

  • A GeoJSON Feature Object for a single feature.

Regardless of the TileMatrixSet CRS, coordinates SHALL be in CRS84 as stated in the GeoJSON standard unless a prior arrangement applies to use an alternative coordinate reference system. The fact that a TileMatrixSet is used does not constitute a prior arrangement. For example, an extension could negotiate another CRS for coordinates with a query parameter.

identifier

/rec/geojson/overflow

part

A GeoJSON content of a tile can contain features that are partially outside of the tile bounding box.

Requirements Class "Mapbox Vector Tiles"

Mapbox Vector Tiles is a well-known format for representing features with geometries in a tile [8]. The Mapbox Vector Tile format uses Google Protocol Buffers as an encoding format. Protocol Buffers are a language-neutral, platform-neutral extensible mechanism for serializing structured binary data. A Mapbox Vector Tile represents data based on a square extent within a tile matrix set. However, a Mapbox Vector Tile does not contain information about its bounds and TileMatrixSet. The file format assumes that the client knows the bounds and TileMatrixSet of the file before decoding it.

Example 30. Requirements Class MVT
identifier

/req/mvt/content

part

Every 200-response of the server with the media type application/vnd.mapbox-vector-tile SHALL be a Mapbox Vector Tile document representing only one tile.

part

A feature SHALL contain a geometry field. A feature SHALL contain a type field as described in the Geometry Types section.

part

The grid space for the MVT coordinates SHALL map linearly to the coordinates in the tile extent expressed in the Tileset CRS unless a prior arrangement applies to use an alternative CRS; and in this case the linear mapping SHALL be done to the alternative CRS and not with the Tileset CRS. For example, an extension could negotiate another CRS for coordinates with a query parameter. In particular the 0,0 coordinate in the MVT maps to the top-left corner of the tile. The bottom-right corner of the tile corresponds the bottom-right corner of the MVT grid.

Note
The support of Mapbox Vector Tiles does not make the OGC API dependent on the Mapbox Vector Tile Specification. The support of Mapbox Vector Tiles is completely optional in a Web API. This Requirements Class is completely independent of the version of Mapbox Vector Tiles and future versions.

Appendix A: Abstract Test Suite

An implementation of this standard must satisfy the following system characteristics to be conformant with this specification.

Conformance Class "Core"

identifier

http://www.opengis.net/spec/ogcapi-tiles-1/1.0/conf/core

subject

Requirements Class "Core"

classification

Target Type:Web API

Declaration of conformance classes

Response
identifier

/conf/core/conformance-success

target

/req/core/conformance-success

test-purpose

Validate that the Conformance Declaration response complies with the required structure and contents.

test-method
  1. If there is a Conformance Class declaration document, validate the response document against OpenAPI 3.0 schema confClasses.yaml

  2. Validate that the document includes the conformance class "http://www.opengis.net/spec/ogcapi-tiles-1/1.0/conf/core"

A tile

Operation
identifier

/conf/core/tc-op

target

/req/core/tc-op

test-purpose

With a provided template, validate that tiles are available for the right GET request.

test-method
  1. Validate that tiles making up a tileset containing available data are available as an HTTP GET request to a URI that is built from a template containing three variables (such as {tileMatrix}, {tileRow} and {tileCol} as defined by the tileset conformance class, or {z}, {y} and {x}). The URI is obtained by substituting the variables by their respective valid values.

  2. Validate that the variables in the URL correspond to the tile matrix, tile row and tile column of a particular tile matrix set as defined by the 2D Tile Matrix Set standard.

  3. Validate that the API provides a mechanism for obtaining the template and associating the variables to their respective meaning, for example by implementing the tileset conformance class, or through an API definition.

Note
In practice, to test for conformance to the Core conformance class, the user of the test should provide a TileMatrixSet definition, a URL template (that contains the endpoint for tiles) with specific variable names, and a range of valid values for those variables and building the URLs. Once the information has been provided, the user can then execute the test.
Parameter tileMatrix
identifier

/conf/core/tc-tilematrix-definition

target

/req/core/tc-tilematrix-definition

test-purpose

Validate that there is a tileMatrix definition.

test-method
  1. If the API implements OGC API - Common - Part 1: Core, validate that the definition of a tile operation contains a mandatory string parameter tileMatrix.

Parameter tileRow
identifier

/conf/core/tc-tilerow-definition

target

/req/core/tc-tilerow-definition

test-purpose

Validate that there is a tileRow definition.

test-method
  1. If the API implements OGC API - Common - Part 1: Core, validate that the definition of a tile operation contains a mandatory integer parameter tileCol.

Parameter tileCol
identifier

/conf/core/tc-tilecol-definition

target

/req/core/tc-tilecol-definition

test-purpose

Validate that there is a tileCol definition.

test-method
  1. If the API implements OGC API - Common - Part 1: Core, validate that the definition of a tile operation contains a mandatory integer parameter tileCol.

Response
identifier

/conf/core/tc-success

target

/req/core/tc-success

test-purpose

Validate that a successful execution with data responds with an HTTP status code 200, the format is consistent with the requested and the elements represented in the tile are the ones present in the geographical area.

test-method
  1. Validate that a successful execution of the operation with content responds with a HTTP status code 200.

  2. Validate that the content of that response is consistent with the format requested via HTTP content negotiation and represents elements inside or intersecting with the spatial extent of the geographical area of the tile identified by the tile matrix, tile row and tile column of the tileset’s tile matrix set.

Error conditions
identifier

/conf/core/tc-error

target

/req/core/tc-error

test-purpose

Validate that the request for a tile that is out-of-range or empty, responds with the right content

test-method
  1. If the path parameter values tileMatrix, tileRow, tileCol for a tile request are out-of-range (outside the tile matrix set or tile matrix set limits of the resource), validate that the HTTP response is a status code 404 or a 400.

  2. If the tile has no content due to lack of data in the area, but is within the data resource’s tile matrix sets and tile matrix sets limits, validate that the HTTP response is a status code either 204 (indicating an empty tile with no content) or a 200 with the content of a blank response compatible with the requested media type (which may or may not be zero bytes long, depending on the output format; e.g., a 0 byte file if valid for the requested format, or a PNG with internal headers and no "pixels").

Conformance Class "Tileset"

Tileset resource

Response
identifier

/conf/tileset/description

target

/req/tileset/description

test-purpose

Validate the content of a tileset description

test-method
  1. Validate that the tileset endpoint SHALL support negotiation for an application/json response. In this case, a successful response of a HTTP GET for a specific tileset is encoded following the data model and JSON schema for tileset metadata, as defined by the 2D Tile Matrix Set and Tileset Metadata standard 2.0.

  2. If the tileset endpoint also supports negotiation for an application/xml response, validate that a successful response of a HTTP GET for a specific tileset is encoded following the data model and XML schema for tileset metadata, as defined by the 2D Tile Matrix Set and Tileset Metadata standard 2.0.

  3. If the tileset uses a TileMatrixSet registered in a TileMatrixSet register that is published through an accessible registry (e.g. the OGC TileMatrixSet register), validate that the tileMatrixSetURI property links to the registered TileMatrixSet (e.g. http://www.opengis.net/def/tilematrixset/{tileMatrixSet}).

  4. Validate that the links property includes a link to the TileMatrixSet definition with relation type http://www.opengis.net/def/rel/ogc/1.0/tiling-scheme following the tile matrix set schema, as defined by the 2D Tile Matrix Set and Tile Set Metadata standard 2.0.

  5. Validate that the tileset metadata includes at least one templated link to individual tiles using the relation type item, and the template parameters {tileMatrix}, and {tileRow} and {tileCol}. Those variables are to be substituted by their respective valid values to obtain the URL to a tile.

  6. If a tiles link template is specific to a particular format, validate that contains the media type for that format in the "type" property. Otherwise, normal HTTP content type negotiation rules apply (Accept: header).

  7. Validate that a property templated with a boolean true value is part of the link properties to indicate that the link needs to be processed to substitute the templated variables with valid values before being used as a URL to a tile.

Conformance Class "Tilesets List"

Tilesets list

Response

Conformance Class "Dataset Tilesets"

Web API landing page

Response
identifier

/conf/dataset-tilesets/landingpage

target

/req/dataset-tilesets/landingpage

test-purpose

Validate that it is possible to retrieve the tilesets list for the dataset

test-method
  1. If the API has a mechanism to expose root resources (e.g., a landing page), validate that the API advertises at least one URI for retrieving a tilesets list that is provided by this service with a link having a rel value: http://www.opengis.net/def/rel/ogc/1.0/tilesets-vector, http://www.opengis.net/def/rel/ogc/1.0/tilesets-map or http://www.opengis.net/def/rel/ogc/1.0/tilesets-coverage.

Dataset tilesets

Operation
identifier

/conf/dataset-tilesets/operation

target

/req/dataset-tilesets/operation

test-purpose

Validate that there is an operation to get the tilesets list.

test-method
  1. Validate that the dataset resource (the root resource) has at least one tileset accessible at …​/tiles supporting an HTTP GET operation

  2. Validate that the URI is composed of two parts: the initial part is the URI of the dataset resource (the root resource) that can be represented as tiles and the final part follows the pattern /tiles

Conformance Class "GeoData Tilesets"

Geospatial data resources

Geospatial data resources tilesets list

Tilesets path
identifier

/conf/geodata-tilesets/operation

target

/req/geodata-tilesets/operation

test-purpose

Validate that there is an operation to get the tilesets list.

test-method
  1. Validate that the geospatial data resource has an associated list of at least one tileset accessible at …​/tiles supporting an HTTP GET operation

  2. Validate that the URI is composed of two parts: the initial part is the URI of the geospatial data resource that can be represented as tiles and the final part follows the pattern /tiles

Conformance Class "Collections Selection"

Operation

Parameter collections
identifier

/conf/collections-selection/query-collections

target

/req/collections-selection/query-collections

test-purpose

Validate support of the optional parameter collections.

test-method

Given:

A tileset for an origin consisting of multiple geospatial data sub-resources (e.g., described in the tileset metadata as being comprised of multiple layers).

When:

Requesting resources either for the tileset or for individual tiles (e.g., a dataset tileset at {datasetAPI}/tiles/WebMercatorQuad and dataset tiles at {datasetAPI}/tiles/WebMercatorQuad/{tileMatrix}/{tileRow}/{tileCol}), with a collections query parameter consisting of a comma-separated list of collectionIDs (consistent with the collection identifiers making up that tileset, as described for example, in the tileset metadata layers).

Then:

Assert that the parameter is accepted for valid lists of collectionIDs.

Note that servers are free to restrict valid combinations of collectionIDs (permission /per/collections-selection/valid-collections). Tests should be restricted to few collections e.g., between one and five. If the sub-collections are also available individually, only collections advertising support for the same TileMatrixSet, CRS and encodings as used for the request should be selected.

Response
identifier

/conf/collections-selection/collections-response

target

/req/collections-selection/collections-response

test-purpose

Validate response when using collections parameter.

test-method

Given:

Requests described in the previous abstract test (query-collections)

When:

The request is successful

Then:

Assert that the response to tilesets and tiles requests only include the selected collections. For tilesets, verify that only the selected collections are included in the layers. For tiles, verify that the content is limited to the data pertaining to the selected collections.

If more than one collection is selected and no style applied specifies otherwise, validate that the selected collections are included in the response starting by the first (leftmost in the comma-separated list) and ending by the last (rightmost). In map tiles, this will result in the first collection being portrayed at the bottom and the others are rendered on top of the previous ones, one by one (the rightmost collection will become topmost in the portrayal).

Conformance Class "DateTime"

datetime query parameter request and response

identifier

/conf/collections/rc-op-datetime

target

/req/collections/rc-datetime-definition

target

/req/collections/rc-datetime-response

test-purpose

Validate that resources can be identified and extracted from an API server using the datetime query parameter.

test-method
  1. Select a valid datetime value which intersects a subset of the resource collections available through the API implementation.

  2. Construct a datetime query parameter using the selected value.

  3. Validate the datetime query parameter using /conf/collections/rc-datetime-definition

  4. Issue an HTTP GET request to the URL {root}/collections. Include the validated datetime query parameter.

  5. Validate that a document was returned with a status code 200

  6. Validate the contents of the returned document using:

identifier

/conf/collections/rc-datetime-definition

target

/req/collections/rc-datetime-definition

test-purpose

Validate that the dateTime query parameter is constructed correctly.

test-method

Verify that the datetime query parameter complies with the following definition (using an OpenAPI Specification 3.0 fragment):

name: datetime
in: query
required: false
schema:
  type: string
style: form
explode: false
identifier

/conf/collections/rc-datetime-response

target

/req/collections/rc-datetime-definition

target

/req/collections/rc-datetime-response

test-purpose

Validate that the datetime query parameter is processed correctly.

test-method

DO FOR each Collection in the collections element of the response:

  1. Extract the temporal geometry from the interval element of the extent property of the Collection resource.

  2. IF there is a temporal geometry, verify that the temporal geometry intersects the temporal period defined by the datetime parameter.

  3. IF there is a temporal geometry, validate that the processing of the datetime parameter complies with the syntax described in /req/collections/rc-datetime-definition (B, C, and D).

subset=datetime query parameter request and response

identifier

/conf/collections/rc-op-subset

target

/req/collections/rc-subset-definition

target

/req/collections/rc-subset-response

test-purpose

Validate that resources can be identified and extracted from an API server using the subset query parameter.

test-method
  1. Select a valid subset value which intersects a subset of the resource collections available through the API implementation.

  2. Construct a subset query parameter using the selected dimension name and value.

  3. Validate the subset query parameter using /conf/collections/rc-subset-definition

  4. Issue an HTTP GET request to the URL {root}/collections. Include the validated subset query parameter.

  5. Validate that a document was returned with a status code 200

  6. Validate the contents of the returned document using:

identifier

/conf/collections/rc-subset-definition

target

/req/collections/rc-subset-definition

test-purpose

Validate that the subset query parameter is constructed correctly.

test-method

Verify that the subset query parameter complies with the following definition (using an OpenAPI Specification 3.0 fragment):

  SubsetSpec:       "subset"=axisName(intervalOrPoint)
  axisName:         {text}
  intervalOrPoint:  interval \| point
  interval:         low : high
  low:              point \| *
  high:             point \| *
  point:            {number} \| "{text}"

  Where:
     \" = double quote = ASCII code 0x42,
     {number} is an integer or floating-point number, and
     {text} is some general ASCII text (such as a time and date notation in ISO 8601).
identifier

/conf/collections/rc-subset-response

target

/req/collections/rc-subset-definition

target

/req/collections/rc-subset-response

target

/req/collections/rc-subset-collection-response

test-purpose

Validate that the subset query parameter is processed correctly.

test-method

DO FOR each Collection in the collections element of the response:

  1. Extract the dimension values from the interval element of the extent property of the Collection resource.

  2. If the dimension is there, verify that the dimension interval intersects the dimension period defined by the subset parameter.

  3. If the dimension is there, validate that the processing of the subset parameter complies with the syntax described in /req/collections/rc-subset-definition.

identifier

/conf/datetime/axis

target

/req/datetime/axis

test-purpose

Validate that a request of a subset of a datetime dimension is supported by the server

test-method
  1. Validate the server support "datetime" as axisname in the subset parameter to subset the generic datetime dimension.

Conformance Class "OpenAPI Specification 3.0"

Web API OpenAPI definition response

identifier

/conf/oas30/completeness

target

/req/oas30/completeness

test-purpose

Validate OpenAPI completeness and consistency

test-method
  1. Validate that OpenAPI definition describes all tileset, tilesets list and tile resources provided by the API instance.

  2. Validate that the OpenAPI paths are consistent with the links provided by the landing page, tileset and tilesets list resources.

  3. Validate that the OpenAPI paths provide the description of the parameters that the tileset and tile resources need to operate as specified in the corresponding conformance classes.

identifier

/conf/oas30/operation-id

target

/req/oas30/operation-id

test-purpose

Validate use of operationID suffixes in OpenAPI definition

test-method
  1. Validate that at least one instance of all path operations defined in the supported conformance classes can be discovered in the API definition by identifying them based on the operationIDs suffixes specified in Table 10.

Conformance Class "XML Tileset Metadata"

XML encoding

identifier

/conf/xml/definition

target

/req/xml/definition

test-purpose

Validate the support of the required media type

test-method
  1. Validate that 200-responses of the server support the application/xml media type for the Tilesets list and TileSet resources.

identifier

/conf/xml/content

target

/req/xml/content

test-purpose

Validate the particularities of an XML response

test-method
  1. Validate that every request to a TileSets list or TileSet resource which: Receives a 200-response and with the Content-Type header set to application/xml includes, or links to, a payload encoded according to the Extensible Markup Language (XML) 1.0

  2. Validate that the payload for these responses conforms with the XML Schema specified for the resource in the OGC 17-083r4: OGC Two Dimensional Tile Matrix Set and Tile Set Metadata

Conformance Classes for tile encodings

Conformance Class "PNG"

identifier

http://www.opengis.net/spec/ogcapi-tiles-1/1.0/conf/png

subject

Requirements Class "PNG"

classification

Target Type:Web API

PNG encoding
identifier

/conf/png/content

target

/req/png/content

test-purpose

Validate the particularities of a PNG response

test-method
  1. Validate that every 200-response of the server with the media type image/png contains a PNG document representing only one tile.

  2. Validate that the colors of the PNG represent the geospatial features or coverage values in the tile.

  3. Validate that the alpha channel of the PNG is used when partial transparency is required.

  4. Validate that all tiles representing parts of the same resource or resources, and using the same style, are following the same portrayal rules.

Conformance Class "JPEG"

identifier

http://www.opengis.net/spec/ogcapi-tiles-1/1.0/conf/jpeg

subject

Requirements Class "JPEG"

classification

Target Type:Web API

JPEG Encoding
identifier

/conf/jpeg/content

target

/req/jpeg/content

test-purpose

Validate the particularities of a JPEG response

test-method
  1. Validate that every 200-response of the server with the media type image/jpeg contains a JPEG document representing only one tile.

  2. Validate that the colors of the JPEG represent coverage values or geospatial features in the tile.

  3. Validate that all tiles representing parts of the same resource or resources using the same style are following the same portrayal rules.

Conformance Class "TIFF"

identifier

http://www.opengis.net/spec/ogcapi-tiles-1/1.0/conf/tiff

subject

Requirements Class "TIFF"

classification

Target Type:Web API

TIFF encoding
identifier

/conf/tiff/content

target

/req/tiff/content

test-purpose

Validate the particularities of a TIFF response

test-method
  1. Validate that every 200-response of the server with the media type image/tiff contains a TIFF document representing only one tile

  2. Validate that the TIFF file is organized in strips (avoiding organization in internal tiles).

  3. Validate that all tiles representing parts of the same resource or resources and using the same style follows the same portrayal rules or represent data with the same reference and units of measure.

identifier

/conf/tiff/geotiff

target

/req/tiff/geotiff

test-purpose

Validate GeoTIFF consistency of the georeference

test-method
  1. If the TIFF encoding incorporates a GeoTIFF georeference, validate that this information is consistent with the TileMatrixSet, TileMatrix, TileRow and TileCol

Conformance Class "NetCDF"

identifier

http://www.opengis.net/spec/ogcapi-tiles-1/1.0/conf/netcdf

subject

Requirements Class "NetCDF"

classification

Target Type:Web API

NetCDF encoding
identifier

/conf/netcdf/content

target

/req/netcdf/content

test-purpose

Validate the particularities of a NetCDF response

test-method
  1. Validate that every 200-response of the server with the media type application/netcdf or application/x-netcdf contains a NetCDF document representing only one tile

  2. Validate that the NetCDF file contains only data in two or more dimensions

identifier

/conf/netcdf/geo

target

/req/netcdf/geo

test-purpose

Validate NetCDF consistency of the georeference

test-method
  1. Validate that the NetCDF encoding incorporates a georeference, this information is consistent with the TileMatrixSet, TileMatrix, TileRow and TileCol

Conformance Class "GeoJSON"

GeoJSON Encoding
identifier

/conf/geojson/content

target

/req/geojson/content

test-purpose

Validate the particularities of a GeoJSON response

test-method
  1. Validate that every 200-response of the server with the media type application/geo+json contains a GeoJSON document representing only one tile.

  2. Validate that root of the GeoJSON document is a GeoJSON FeatureCollection Object for features, or a GeoJSON Feature Object for a single feature.

  3. Validate that regardless of the TileMatrixSet CRS, the geometry coordinates are in CRS84 as stated in the GeoJSON standard unless a prior arrangement applies to use an alternative coordinate reference system. The fact that a TileMatrixSet is used does not constitute a prior arrangement. For example, an extension could negotiate another CRS for coordinates with a query parameter.

Conformance Class "Mapbox Vector Tiles"

Mapbox Vector Tiles Encoding
identifier

/conf/mvt/content

target

/req/mvt/content

test-purpose

Validate the particularities of a Mapbox Vector Tiles response

test-method
  1. Validate that every 200-response of the server with the media type application/vnd.mapbox-vector-tile contains a Mapbox Vector Tile document representing only one tile.

  2. Validate that a feature contains a geometry field. Validate that a feature contains a type field as described in the Geometry Types section.

  3. Validate that the grid space for the MVT coordinates maps linearly to the coordinates in the tile extent expressed in the Tileset CRS unless a prior arrangement applies to use an alternative CRS; and in this case the linear mapping is done to the alternative CRS and not with the Tileset CRS. For example, an extension could negotiate another CRS for coordinates with a query parameter. In particular the 0,0 coordinate in the MVT maps to the top-left corner of the tile. The bottom-right corner of the tile corresponds the bottom-right corner of the MVT grid.

Appendix B: Revision history

Date Release Editor Primary clauses modified Description

2019-03-21

Template

C. Heazel

all

initial template

2020-04-15

0.0.1

J. Maso

all

Several

2020-04-21

0.0.2

J. Maso

all

Several

2020-05-21

0.0.3

G. Hobona

Annex A

Fixed Conformance Class URI and added abstract tests

2022-03-30

0.8.0

J. Maso & J. St-Louis

all

Candidate standard version for public comments

2022-06-16

0.9.0

J. Maso & J. St-Louis

all

Initial version presented to the TC for approval

2022-07-14

1.0.0 draft 1

J. Maso & J. St-Louis

several

Editorial fixes; synchronized OpenAPI schemas with 2DTMS & TileSet metadata standard

2022-09-12

1.0.0 draft 2

G. Hobona

all

Conversion to metanorma

2022-09-15

1.0.0

J. Maso & J. St-Louis

several

Initial version 1.0

2022-10-24

1.0.0

G. Hobona

several

OGC Staff editorial review

2022-12-05

1.0.0

C. Reed, J. Maso, J. St-Louis & G. Hobona

multiple

This release of version 1.0 fixes minor non-normative issues that were in the 2022-11-10 release of version 1.0

Bibliography

This standard is deeply inspired by concepts defined in the following documents that preceded it. This standard offers an alternative interface to fulfill similar tasks described in these references: