How to use the OGC WMTS service in your map with OpenLayers
This tutorial shows how to add an OGC WMTS from MapTiler to your web map using OpenLayers. The easiest way to add a WMTS to a map is to get the configuration information directly from the GetCapabilities response.
-
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 protect 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.
-
Create the WMTS capabilities parser.
-
Get the WMTS Capabilities information and read it with the parser.
- Change the
sourceto use the WMTS
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Display a 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>
body {
margin: 0;
padding: 0;
}
#map {
position: absolute;
top: 0;
right: 0;
bottom: 0;
left: 0;
}
</style>
</head>
<body>
<div id="map"></div>
<script>
const key = 'YOUR_MAPTILER_API_KEY_HERE';
const attribution = new ol.control.Attribution({
collapsible: false,
});
const parser = new ol.format.WMTSCapabilities();
fetch(`https://api.maptiler.com/maps/streets-v4/WMTSCapabilities.xml?key=${key}`)
.then(function (response) {
return response.text();
})
.then(function (text) {
const result = parser.read(text);
const options = ol.source.WMTS.optionsFromCapabilities(result, {
layer: 'maps/streets-v4',
matrixSet: 'GoogleMapsCompatible512-z0-22'
});
const source = new ol.source.WMTS({
...options,
attributions: [
'<a href="https://www.maptiler.com/copyright/" target="_blank">© MapTiler</a>',
'<a href="https://www.openstreetmap.org/copyright" target="_blank">© OpenStreetMap contributors</a>'
]
});
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([16.62662018, 49.2125578]),
zoom: 12
})
});
});
</script>
</body>
</html>
-
Import the new modules needed to add the new functionality.
import Map from 'ol/Map.js'; import View from 'ol/View.js'; import TileLayer from 'ol/layer/Tile.js'; import WMTS, {optionsFromCapabilities} from 'ol/source/WMTS.js'; import Attribution from 'ol/control/Attribution.js'; import WMTSCapabilities from 'ol/format/WMTSCapabilities.js'; import { defaults as defaultControls } from 'ol/control/defaults.js'; import { fromLonLat } from 'ol/proj.js'; -
Create the WMTS capabilities parser.
- Get the WMTS Capabilities information and read it with the parser.
- Change the
sourceto use the WMTS
npm install --save ol
import Map from 'ol/Map.js';
import View from 'ol/View.js';
import TileLayer from 'ol/layer/Tile.js';
import WMTS, {optionsFromCapabilities} from 'ol/source/WMTS.js';
import Attribution from 'ol/control/Attribution.js';
import WMTSCapabilities from 'ol/format/WMTSCapabilities.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 parser = new WMTSCapabilities();
fetch(`https://api.maptiler.com/maps/streets-v4/WMTSCapabilities.xml?key=${key}`)
.then(function (response) {
return response.text();
})
.then(function (text) {
const result = parser.read(text);
const options = optionsFromCapabilities(result, {
layer: 'maps/streets-v4',
matrixSet: 'GoogleMapsCompatible512-z0-22'
});
const source = new WMTS({...options,
attributions: [
'<a href="https://www.maptiler.com/copyright/" target="_blank">© MapTiler</a>',
'<a href="https://www.openstreetmap.org/copyright" target="_blank">© OpenStreetMap contributors</a>'
]
});
const map = new Map({
layers: [
new TileLayer({
source: source
})
],
controls: defaultControls({attribution: false}).extend([attribution]),
target: 'map',
view: new View({
constrainResolution: true,
center: fromLonLat([16.62662018, 49.2125578]),
zoom: 12
})
});
});
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="robots" content="noindex">
<title>How to use the OGC WMTS service in your map with OpenLayers | NPM example</title>
<link rel="stylesheet" href="./style.css">
</head>
<body>
<div id="map"></div>
<script type="module" src="./main.js"></script>
</body>
</html>
body {
margin: 0;
padding: 0;
}
#map {
position: absolute;
top: 0;
right: 0;
bottom: 0;
left: 0;
}
Warning
The WMTS functionality requires at least a FLEX plan subscription. For more information, read about the different MapTiler plans.
Learn more
If you want to learn more about OGC WMTS check out the WMTS article.