How to display a custom map on a web with OpenLayers
This example demonstrates how to display a custom map from MapTiler on a web page using OpenLayers.
To create your first custom map, check out the How to create a custom map tutorial.
-
Copy the following code, paste it into your favorite text editor, and save it as a
.htmlfile.
Check out the step-by-step tutorial How to use OpenLayers
-
Replace
YOUR_MAPTILER_API_KEY_HEREwith your own API key. Make sure to secure the key before you publish it. -
The next is up to you. You can center your map wherever you desire (modifying the
starting position) and set an appropriate zoom level (modifying thestarting zoom) to match your users’ needs. Additionally, you can change the map’s look (by updating thesource URL); choose from a range of visually appealing map styles from our extensive MapTiler standard maps, or create your own to truly differentiate your application.
-
Replace the TileJSON source URL with your custom map style. Check the Publish the map section to get the URL of your custom style.
const source = new ol.source.TileJSON({ url: `https://api.maptiler.com/maps/YOUR_CUSTOM_MAP_ID/tiles.json?key=${key}`, // source URL tileSize: 512, crossOrigin: 'anonymous' });
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="initial-scale=1,maximum-scale=1,user-scalable=no" />
<title>Display a custom map</title>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/ol@v10.1.0/ol.css">
<script src="https://cdn.jsdelivr.net/npm/ol@v10.1.0/dist/ol.js"></script>
<style>
#map {position: absolute; top: 0; right: 0; bottom: 0; left: 0;}
</style>
</head>
<body>
<div id="map">
<a href="https://www.maptiler.com" style="position:absolute;left:10px;bottom:10px;z-index:999;"><img src="https://api.maptiler.com/resources/logo.svg" alt="MapTiler logo"></a>
</div>
<script>
const key = 'YOUR_MAPTILER_API_KEY_HERE';
const attribution = new ol.control.Attribution({
collapsible: false,
});
const source = new ol.source.TileJSON({
url: `https://api.maptiler.com/maps/YOUR_CUSTOM_MAP_ID/tiles.json?key=${key}`, // source URL
tileSize: 512,
crossOrigin: 'anonymous'
});
const map = new ol.Map({
layers: [
new ol.layer.Tile({
source: source
})
],
controls: ol.control.defaults.defaults({attribution: false}).extend([attribution]),
target: 'map',
view: new ol.View({
constrainResolution: true,
center: ol.proj.fromLonLat([10.989249486220501, 46.948652944430734]), // starting position [lng, lat]
zoom: 12 // starting zoom
})
});
</script>
</body>
</html>
-
Replace the TileJSON source URL with your custom map style. Check the Publish the map section to get the URL of your custom style.
const source = new TileJSON({ url: `https://api.maptiler.com/maps/YOUR_CUSTOM_MAP_ID/tiles.json?key=${key}`, // source URL tileSize: 512, crossOrigin: 'anonymous' });
npm install --save ol
import Map from 'ol/Map.js';
import View from 'ol/View.js';
import TileLayer from 'ol/layer/Tile.js';
import TileJSON from 'ol/source/TileJSON.js';
import Attribution from 'ol/control/Attribution.js';
import { defaults as defaultControls } from 'ol/control/defaults.js';
import { fromLonLat } from 'ol/proj.js';
import 'ol/ol.css';
const key = 'YOUR_MAPTILER_API_KEY_HERE';
const attribution = new Attribution({
collapsible: false,
});
const source = new TileJSON({
url: `https://api.maptiler.com/maps/YOUR_CUSTOM_MAP_ID/tiles.json?key=${key}`, // source URL
tileSize: 512,
crossOrigin: 'anonymous'
});
const map = new Map({
layers: [
new TileLayer({
source: source
})
],
controls: defaultControls({attribution: false}).extend([attribution]),
target: 'map',
view: new View({
constrainResolution: true,
center: fromLonLat([10.989249486220501, 46.948652944430734]), // starting position [lng, lat]
zoom: 12 // starting zoom
})
});
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="robots" content="noindex">
<title>How to display a custom map on a web with OpenLayers | NPM example</title>
<link rel="stylesheet" href="./style.css">
</head>
<body>
<div id="map">
<a href="https://www.maptiler.com" style="position:absolute;left:10px;bottom:10px;z-index:999;"><img src="https://api.maptiler.com/resources/logo.svg" alt="MapTiler logo"></a>
</div>
<script type="module" src="./main.js"></script>
</body>
</html>
#map {position: absolute; top: 0; right: 0; bottom: 0; left: 0;}
Learn more
Check out this tutorial How to create a custom map to learn how to create the map of the ski slopes of the online demo.