The scene file is a YAML document which organizes all of the elements Tangram uses to draw a map. YAML is a data format similar in many ways to JSON, but it has some unique features which we thought made it more friendly and easy to use for our purposes. (See the YAML entry for more about those features.)

Top-level Elements

There are a variety of top-level elements allowed in a scene file. Each defines the beginning of a block named for the element.

cameras

Optional element. The cameras block allows modifications to the view of the map.

See Cameras Overview and cameras.

layers

Required element. The layers block divides the data into layers and assigns styling parameters.

See Styles Overview and layers.

global

Optional element. The global block allows the addition of custom named parameters which can be substituted for values elsewhere in the scene file.

See global.

import

Optional element. The import block allows other .yaml files, containing any combination of Tangram scene blocks, specified from the top-level blocks outward, up to entire scene files, to be imported into the current scene, through a simple text-based merge.

See import.

lights

Optional element. The lights block allows control of the lighting of the map.

See Lights Overview and lights.

scene

Optional element. The scene block sets various scene-wide parameters.

See scene.

sources

Required element. The sources block identifies datasources.

See sources.

styles

Optional element. The styles block defines rendering styles, which are composed of materials and shaders.

See Styles Overview and styles.

textures

Optional element. The textures block allows for advanced configuration of textures within materials.

See Materials Overview and textures.

The basics

To create a map, the scene file requires only:

  • a data source
  • data interpretation rules (filters)
  • styling rules

Here’s a simple scene file:

sources:
    mapzen:
        type: TopoJSON
        url: https://tile.mapzen.com/mapzen/vector/v1/all/{z}/{x}/{y}.topojson

layers:
    earth:
        data: { source: mapzen }
        draw:
            polygons:
                order: 0
                color: darkgreen
    water:
        data: { source: mapzen }
        draw:
            polygons:
                order: 1
                color: lightblue

    roads:
        data: { source: mapzen }
        draw:
            lines:
                order: 2
                color: white
                width: 1.5px

In this example, all three elements are included – this will produce a map.