JSON Format Specification

May 19, 2026 ยท View on GitHub

This section describes the format of the layer.json manifest file. The format is derived from tilejson, but is not a strict subset of this format. The JSON schema for this file can be found in layer.schema.json. The following table summarizes the properties that can be contained in this JSON file, their data types, default values, and interpretation:

PropertyTypeDescriptionRequired
namestringThe name of this terrain tileset.No. Default: "Terrain"
descriptionstringThe description of this terrain tileset.No. Default: ""
attributionstringThe attribution (credit) string for the terrain.No. Default: ""
versionstringThe version of this tileset.No. Default: "1.0.0"
formatstringThe format of the terrain tiles. Should be "quantized-mesh-1.0".No. Default: "quantized-mesh-1.0"
schemestringThe tiling scheme. The only valid value is "tms".No. Default: "tms"
extensionsstring[]The extensions available for this tileset.No. Default: undefined
projectionstringThe map projection of this tileset. Valid values are "EPSG:4326" and "EPSG:3857".No. Default: "EPSG:4326"
parentUrlstringThe URL of the parent layer.json that this one is layered on top of. When this is defined, then availability information and the presence of extensions should also be looked up in the parent. Attributions from parents should be integrated into the overall attribution.No. Default: undefined
minzoomintegerThe minimum level for which there are any available tiles.No. Default: 0
maxzoomintegerThe maximum level for which there are any available tiles.Yes
boundsnumber[4]The bounding box of the terrain, expressed as [west, south, east, north], in degrees. This is not required for calculating tile positions or downloads. Implementations may choose to ignore this property.No. Default: [-180,-90,180,90]
tilesstring[]The URL templates from which to obtain tiles.Yes
availableavailabilityRectangle[][]The tile availability information. The outer array is indexed by tile level. The inner array is a list of rectangles of availability at that level. Tiles themselves may also contain further availability information for their subtree. If metadataAvailability is present, then this property should be ignored.No. Default: undefined
metadataAvailabilityintegerThe levels at which metadata is found in tiles. A value of n indicates that metadata can be found at every nth level, starting at 0. For example, if this value is 10, then metadata is found at levels 0, 10, 20, etc. If this property is present, then the available property should be ignored.No. Default: undefined

About available and metadataAvailability

The available property is a predecessor of what is now stored in the metadataAvailability. When the metadataAvailability is present, then the available property should be ignored. Specifically: When the metadataAvailability is present, then the structure of the available property may not properly reflect the actual availability.

About tiles

The tiles property is an array of template URLs. This array should have a length of exactly 1. Clients may choose to ignore all but the first array element. The template URLs can contain variables {x}, {y}, {z}, and {version}. The {z} variable indicates the level of the tile. The {x} and {y} variables indicate the x- and y coordinate of the tile. The version indicator is a hint for clients or users to indicate whether the underlying data changed over time. When clients or users are caching the data in any form, then a change in the version number should cause that cache to be invalidated.

An example of the entry of the tiles array is "{z}/{x}/{y}.terrain?v={version}" At runtime, this will be converted into an actual URL by substituting the template variables accordingly - for example: 5/46/21.terrain?v=1.2.0

About extensions

The extensions is an array of strings that indicate different flavors of the data that may be requested. The elements of this array can be added as query parameters in the request, with the key being extensions, and the value being the names of the desired extensions, separated by a - dash. For example, when the layer JSON indicates extensions

"extensions": [
    "watermask",
    "metadata",
    "octvertexnormals"
]

then the query parameter can be extensions=octvertexnormals-watermask-metadata The request URL (including the substituted template variables) and these parameters would therefore be 12/6074/2684.terrain?extensions=octvertexnormals-watermask-metadata&v=1.2.0

About minzoom

While the value of minzoom can technically be greater than 0, some details of the behavior are not clearly specified for this case. Many clients will ignore the minzoom value, and assume the availability information to be present for layer 0.

About the refinement process

This section is non-normative!

Client implementations will usually traverse the tile hierarchy for a quantized mesh, replacing the rendered representation of one tile with its child tiles, until the desired refinement level is achieved. During this process, the availability of child tiles is checked with the available- or metadataAvailability properties. The availability will be looked up either directly, or via the layer information that is found under the parentUrl.

During this process, it can happen that only some of the four children of a given parent tile are marked as being available.

Clients have different options for handling this case:

  • Clients could omit the child tiles that are not available. This would cause gaps in the visual representation of the tiles, and is therefore not recommended
  • Clients can take the geometry of the parent tile, split it into four parts, and use the respective parts from the parent geometry to fill the gaps that would otherwise be caused by children that are not available
  • Clients can generate artificial "fill tiles" to fill the gaps. These tiles will usually be generated at runtime, by aligning the borders with the geometry of the surrounding tiles, and interpolating the vertex heights bilinearly between the heights of the border vertices.