---
title: "How to set Sky, Fog, Terrain | JavaScript maps SDK"
description: "Create a map with sky, fog and 3D terrain."
---

> For AI agents: a documentation index is available at [/llms.txt](https://docs.maptiler.com/llms.txt). Markdown versions of all pages are available by appending .md to any URL.

# How to set Sky, Fog, Terrain

This tutorial shows how to create a map with sky, fog, and terrain and display it on a web page using MapTiler.

These features help improve the visual quality of your maps and create a more realistic environment. Adding fog and a dynamic sky enhances depth, while terrain makes elevation more visible, resulting in a more engaging map experience.

### NPM module setup

```bash
npm install --save @maptiler/sdk
```

#### main.js

```js
import { Map, MapStyle, config } from '@maptiler/sdk';
import '@maptiler/sdk/dist/maptiler-sdk.css';

config.apiKey = 'YOUR_MAPTILER_API_KEY_HERE';
const map = new Map({
  container: 'map', // container's id or the HTML element in which the SDK will render the map
  style: MapStyle.HYBRID,
  center: [8.02912, 46.53248], // starting position [lng, lat]
  zoom: 13.16, // starting zoom
  bearing: 0,
  pitch: 76,
  hash: true,
  maxPitch: 85,
  terrainControl: true,
  terrain: true
});

function setSkyFromUi() {
  // if sky should not be enabled set sky to undefined
  if (!document.getElementById('sky-enabled').checked) {
    map.setSky(undefined);
    return;
  }
  // setSky from UI (takes values from sliders)
  map.setSky({
    'sky-color': document.getElementById('sky-color-picker').value,
    'sky-horizon-blend': +document.getElementById('sky-horizon-blend-slider').value,
    'horizon-color': document.getElementById('horizon-color-picker').value,
    'horizon-fog-blend': +document.getElementById('horizon-fog-blend-slider').value,
    'fog-color': document.getElementById('fog-color-picker').value,
    'fog-ground-blend': +document.getElementById('fog-ground-blend-slider').value
  });
}

map.on('load', () => {
  document.getElementById('sky-color-picker').addEventListener('change', setSkyFromUi);
  document.getElementById('horizon-color-picker').addEventListener('change', setSkyFromUi);
  document.getElementById('fog-color-picker').addEventListener('change', setSkyFromUi);
  document.getElementById('sky-horizon-blend-slider').addEventListener('change', setSkyFromUi);
  document.getElementById('horizon-fog-blend-slider').addEventListener('change', setSkyFromUi);
  document.getElementById('fog-ground-blend-slider').addEventListener('change', setSkyFromUi);
  document.getElementById('sky-enabled').addEventListener('change', setSkyFromUi);
  setSkyFromUi();
});
```

#### index.html

```html
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="robots" content="noindex">
  <title>Set Sky, Fog, Terrain</title>
  <link rel="stylesheet" href="./style.css">
</head>
<body>
  <div id="map"></div>
  <table id="listing-group" class="listing-group">
    <tr>
      <td><label for="sky-enabled"><em></em>nabled</label></td>
      <td><input type="checkbox" id="sky-enabled" checked /></td>
    </tr>
    <tr>
      <td><label for="sky-color-picker">sky-color</label></td>
      <td><input type="color" id="sky-color-picker" value="#94D6FF" style="width: 100%" /></td>
    </tr>
    <tr>
      <td><label for="horizon-color-picker">horizon-color</label></td>
      <td><input type="color" id="horizon-color-picker" value="#20233C" style="width: 100%" /></td>
    </tr>
    <tr>
      <td><label for="fog-color-picker">fog-color</label></td>
      <td><input type="color" id="fog-color-picker" value="#6E6E6E" style="width: 100%" /></td>
    </tr>
    <tr>
      <td><label for="sky-horizon-blend-slider">sky-horizon-blend</label></td>
      <td><input type="range" id="sky-horizon-blend-slider" min="0" max="1" step="0.01" value="0.4" /></td>
    </tr>
    <tr>
      <td><label for="horizon-fog-blend-slider">horizon-fog-blend</label></td>
      <td><input type="range" id="horizon-fog-blend-slider" min="0" max="1" step="0.01" value="0.5" /></td>
    </tr>
    <tr>
      <td><label for="fog-ground-blend-slider">fog-ground-blend</label></td>
      <td><input type="range" id="fog-ground-blend-slider" min="0" max="1" step="0.01" value="0.4" /></td>
    </tr>
  </table>
  <script type="module" src="./main.js"></script>
</body>
</html>
```

#### style.css

```css
body {
  margin: 0;
  padding: 0;
}

html,
body,
#map {
  height: 100%;
}

.listing-group {
  font-family: 'Open Sans', 'Helvetica Neue', Arial, Helvetica, sans-serif;
  position: absolute;
  bottom: 10px;
  left: 10px;
  color: #333359;
  background-color: rgba(255, 255, 255, 0.8);
  padding: 10px;
  border-radius: 4px;
}

input[type="color"] {
  appearance: none;
  -moz-appearance: none;
  -webkit-appearance: none;
  border-radius: 4px;
  background: none;
  border: 0;
  cursor: pointer;
  height: 30px;
  padding: 0;
  width: 15em;
}
```

### Basic JavaScript setup

```html
<!DOCTYPE html>
<html>

<head>
  <meta charset="utf-8" />
  <title>Set Sky, Fog, Terrain</title>
  <meta name="viewport" content="initial-scale=1,maximum-scale=1,user-scalable=no" />
  <meta property="og:description" content="Example shows how to set sky, fog and horizon color and their blends." />
  <script src="https://cdn.maptiler.com/maptiler-sdk-js/v4.2.0/maptiler-sdk.umd.min.js"></script>
  <link href="https://cdn.maptiler.com/maptiler-sdk-js/v4.2.0/maptiler-sdk.css" rel="stylesheet" />
  <style>
    body {
      margin: 0;
      padding: 0;
    }

    html,
    body,
    #map {
      height: 100%;
    }

    .listing-group {
      font-family: 'Open Sans', 'Helvetica Neue', Arial, Helvetica, sans-serif;
      position: absolute;
      bottom: 10px;
      left: 10px;
      color: #333359;
      background-color: rgba(255, 255, 255, 0.8);
      padding: 10px;
      border-radius: 4px;
    }

    input[type="color"] {
      appearance: none;
      -moz-appearance: none;
      -webkit-appearance: none;
      border-radius: 4px;
      background: none;
      border: 0;
      cursor: pointer;
      height: 30px;
      padding: 0;
      width: 15em;
    }
  </style>
</head>

<body>
  <div id="map"></div>
  <table id="listing-group" class="listing-group">
    <tr>
      <td><label for="sky-enabled"><em></em>nabled</label></td>
      <td><input type="checkbox" id="sky-enabled" checked /></td>
    </tr>
    <tr>
      <td><label for="sky-color-picker">sky-color</label></td>
      <td><input type="color" id="sky-color-picker" value="#94D6FF" style="width: 100%" /></td>
    </tr>
    <tr>
      <td><label for="horizon-color-picker">horizon-color</label></td>
      <td><input type="color" id="horizon-color-picker" value="#20233C" style="width: 100%" /></td>
    </tr>
    <tr>
      <td><label for="fog-color-picker">fog-color</label></td>
      <td><input type="color" id="fog-color-picker" value="#6E6E6E" style="width: 100%" /></td>
    </tr>
    <tr>
      <td><label for="sky-horizon-blend-slider">sky-horizon-blend</label></td>
      <td><input type="range" id="sky-horizon-blend-slider" min="0" max="1" step="0.01" value="0.4" /></td>
    </tr>
    <tr>
      <td><label for="horizon-fog-blend-slider">horizon-fog-blend</label></td>
      <td><input type="range" id="horizon-fog-blend-slider" min="0" max="1" step="0.01" value="0.5" /></td>
    </tr>
    <tr>
      <td><label for="fog-ground-blend-slider">fog-ground-blend</label></td>
      <td><input type="range" id="fog-ground-blend-slider" min="0" max="1" step="0.01" value="0.4" /></td>
    </tr>
  </table>
  <script>
    maptilersdk.config.apiKey = 'YOUR_MAPTILER_API_KEY_HERE';
    const map = new maptilersdk.Map({
      container: 'map', // container's id or the HTML element in which the SDK will render the map
      style: maptilersdk.MapStyle.HYBRID,
      center: [8.02912, 46.53248], // starting position [lng, lat]
      zoom: 13.16, // starting zoom
      bearing: 0,
      pitch: 76,
      hash: true,
      maxPitch: 85,
      terrainControl: true,
      terrain: true
    });

    function setSkyFromUi() {
      // if sky should not be enabled set sky to undefined
      if (!document.getElementById('sky-enabled').checked) {
        map.setSky(undefined);
        return;
      }
      // setSky from UI (takes values from sliders)
      map.setSky({
        'sky-color': document.getElementById('sky-color-picker').value,
        'sky-horizon-blend': +document.getElementById('sky-horizon-blend-slider').value,
        'horizon-color': document.getElementById('horizon-color-picker').value,
        'horizon-fog-blend': +document.getElementById('horizon-fog-blend-slider').value,
        'fog-color': document.getElementById('fog-color-picker').value,
        'fog-ground-blend': +document.getElementById('fog-ground-blend-slider').value
      });
    }

    map.on('load', () => {
      document.getElementById('sky-color-picker').addEventListener('change', setSkyFromUi);
      document.getElementById('horizon-color-picker').addEventListener('change', setSkyFromUi);
      document.getElementById('fog-color-picker').addEventListener('change', setSkyFromUi);
      document.getElementById('sky-horizon-blend-slider').addEventListener('change', setSkyFromUi);
      document.getElementById('horizon-fog-blend-slider').addEventListener('change', setSkyFromUi);
      document.getElementById('fog-ground-blend-slider').addEventListener('change', setSkyFromUi);
      document.getElementById('sky-enabled').addEventListener('change', setSkyFromUi);
      setSkyFromUi();
    });
  </script>
</body>

</html>
```

## Related examples

### [Display marker](https://docs.maptiler.com/sdk-js/examples/default-marker/)

Tutorials

Learn how to add a default marker to your map.

### [3D terrain map](https://docs.maptiler.com/sdk-js/examples/3d-map/)

Tutorials

Create and display 3D terrain maps on web pages.

### [Switch from Mapbox](https://docs.maptiler.com/sdk-js/examples/switch-from-mapbox/)

Tutorials

Guide for migrating from Mapbox GL JS to MapTiler SDK.

### [Switch from MapLibre](https://docs.maptiler.com/sdk-js/examples/switch-from-maplibre/)

Tutorials

Steps to switch from MapLibre GL JS to MapTiler SDK.
