Example of a WMTS based HiDPI layer.
The WMTS source has a tilePixelRatio
option. A HiDPI capable WMTS could provide tiles with 512x512 pixel tiles, but use them in a 256x256 pixel tile grid. In this case tilePixelRatio
needs to be set to 2
.
<!DOCTYPE html>
<html>
<head>
<title>High DPI WMTS</title>
<link rel="stylesheet" href="https://openlayers.org/en/v4.6.4/css/ol.css" type="text/css">
<!-- The line below is only needed for old environments like Internet Explorer and Android 4.x -->
<script src=""></script>
<script src="https://openlayers.org/en/v4.6.4/build/ol.js"></script>
<style>
.map {
background: white;
}
</style>
</head>
<body>
<div id="map" class="map"></div>
<script>
var capabilitiesUrl = 'https://www.basemap.at/wmts/1.0.0/WMTSCapabilities.xml';
// HiDPI support:
// * Use 'bmaphidpi' layer (pixel ratio 2) for device pixel ratio > 1
// * Use 'geolandbasemap' layer (pixel ratio 1) for device pixel ratio == 1
var hiDPI = ol.has.DEVICE_PIXEL_RATIO > 1;
var layer = hiDPI ? 'bmaphidpi' : 'geolandbasemap';
var tilePixelRatio = hiDPI ? 2 : 1;
var map = new ol.Map({
target: 'map',
view: new ol.View({
center: [1823849, 6143760],
zoom: 11
})
});
fetch(capabilitiesUrl).then(function(response) {
return response.text();
}).then(function(text) {
var result = new ol.format.WMTSCapabilities().read(text);
var options = ol.source.WMTS.optionsFromCapabilities(result, {
layer: layer,
matrixSet: 'google3857',
style: 'normal'
});
options.tilePixelRatio = tilePixelRatio;
map.addLayer(new ol.layer.Tile({
source: new ol.source.WMTS(/** @type {!olx.source.WMTSOptions} */ (options))
}));
});
</script>
</body>
</html>