Skip to content

Terrain Tile Specification

SimVector serves continuous global elevation data as compressed 24-bit PNG tiles using the standard Terrain-RGB encoding scheme. It is engineered for low-bandwidth 3D terrain rendering, hypsometric tinting (color-relief), and dynamic hillshading.

Metadata

PropertyValue
Schema NameSimVector Global Elevation 90m
HTTPS Endpointhttps://tiles.simvector.net/global_elevation_90m/{z}/{x}/{y}.png
Protocol Endpointsimvector://global_elevation_90m/{z}/{x}/{y}.png
Source Resolution3 arc-second (~90m nominal grid spacing)
Format / EncodingTerrain-RGB (24-bit PNG)
Tile Size512 x 512 px
Zoom RangeMin: 0 / Max: 10
Spatial Bounds[-180.0, -89.9511287, 180.0, 85.0511287] (Global WGS84)
Elevation UnitMeters MSL

MapLibre GL JS Integration

1. Source Definition

javascript
map.addSource('elevation-dem', {
  type: 'raster-dem',
  tiles: ['simvector://global_elevation_90m/{z}/{x}/{y}.png'],
  tileSize: 512,
  maxzoom: 10,
  bounds: [-180, -89.9511287798066, 180, 85.0511287798066]
});

2. Hillshade Layer

javascript
map.addLayer({
  id: 'vfr-hillshade',
  type: 'hillshade',
  source: 'elevation-dem',
  paint: {
    'hillshade-exaggeration': 0.3,
    'hillshade-shadow-color': '#21160e',
    'hillshade-highlight-color': '#ffffff',
    'hillshade-accent-color': '#000000'
  }
});

3. 3D Mesh Terrain Rendering

To enable native 3D mesh rendering in MapLibre:

javascript
map.setTerrain({
  source: 'elevation-dem',
  exaggeration: 1.0
});

Tile Size Requirement

Always set tileSize: 512 when consuming SimVector DEM tiles. Standard 256px configurations may cause sampling mismatches and visual elevation tearing along tile boundaries.

Example: VFR Color Banding

The following example demonstrates how to apply standard VFR sectional hypsometric tinting to the DEM tile source using MapLibre's color-relief layer type. Altitude bands and color specifications are derived from the FAA's Aeronautical Chart User's Guide.

Altitude Color Bands

Elevation Range (MSL)Elevation Range (Meters)Hex ColorVisual Band
Below Sea Level – 1,000 ft-70m to 304m#cce3b6Light Lowland Green
1,000 ft – 2,000 ft305m to 609m#dcedc2Pale Green
2,000 ft – 3,000 ft610m to 913m#fff7cbSoft Yellow
3,000 ft – 5,000 ft914m to 1,523m#f6e398Warm Yellow
5,000 ft – 7,000 ft1,524m to 2,133m#e8cb83Low Mountain Tan
7,000 ft – 9,000 ft2,134m to 2,742m#ddb07eOchre
9,000 ft – 12,000 ft2,743m to 3,657m#edaa6eHigh Mountain Brown
12,000 ft – 19,633 ft+3,658m to 5,983m#b27d35Dark Alpine Brown

Layer Implementation Snippet

Place this layer above your background fill and below hydrology or aeronautical overlays:

javascript
map.addLayer({
  id: 'vfr-terrain-tint',
  type: 'color-relief',
  source: 'elevation-dem',
  paint: {
    'color-relief-color': [
      'interpolate',
      ['linear'],
      ['elevation'],
      
      // Below Sea Level to 1,000 ft (-70m to 304m)
      -70, '#cce3b6',
      0,   '#cce3b6',
      304, '#cce3b6',

      // 1,000 ft to 2,000 ft (305m to 609m)
      305, '#dcedc2',
      609, '#dcedc2',

      // 2,000 ft to 3,000 ft (610m to 913m)
      610, '#fff7cb',
      913, '#fff7cb',

      // 3,000 ft to 5,000 ft (914m to 1523m)
      914,  '#f6e398',
      1523, '#f6e398',

      // 5,000 ft to 7,000 ft (1524m to 2133m)
      1524, '#e8cb83',
      2133, '#e8cb83',

      // 7,000 ft to 9,000 ft (2134m to 2742m)
      2134, '#ddb07e',
      2742, '#ddb07e',

      // 9,000 ft to 12,000 ft (2743m to 3657m)
      2743, '#edaa6e',
      3657, '#edaa6e',

      // 12,000 ft to 19,633 ft (3658m to 5983m)
      3658, '#b27d35',
      5983, '#b27d35'
    ],
    'color-relief-opacity': 1.0
  }
});