High DPI WMTS

This example uses OpenLayers v4.0.1. The latest is v.

#### High DPI WMTS

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`.

Related API documentation:

- ol.Map
,
- ol.View
,
- ol.format.WMTSCapabilities
,
- ol.has
,
- ol.layer.Tile
,
- ol.source.WMTS

Copy Edit
High DPI WMTS Example of a WMTS based HiDPI layer. 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(options) })); }); .map { background: white; } <div id="map" class="map"></div>

    <!DOCTYPE html>
    <html>
      <head>
        <title>High DPI WMTS</title>
        <link rel="stylesheet" href="https://openlayers.org/en/v4.0.1/css/ol.css" type="text/css">
        <!-- The line below is only needed for old environments like Internet Explorer and Android 4.x -->
        <script src="https://cdn.polyfill.io/v2/polyfill.min.js?features=requestAnimationFrame,Element.prototype.classList,URL"></script>
        <script src="https://openlayers.org/en/v4.0.1/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(options)
            }));
          });
        </script>
      </body>
    </html>