import Map from '../src/ol/Map.js'; import OSM from '../src/ol/source/OSM.js'; import TileLayer from '../src/ol/layer/WebGLTile.js'; import View from '../src/ol/View.js'; import XYZ from '../src/ol/source/XYZ.js'; import {getRenderPixel} from '../src/ol/render.js'; const osm = new TileLayer({ source: new OSM({wrapX: true}), }); const key = 'get_your_own_D6rA4zTHduk6KOKTXzGB'; const imagery = new TileLayer({ source: new XYZ({ url: 'https://api.maptiler.com/tiles/satellite/{z}/{x}/{y}.jpg?key=' + key, attributions: '© MapTiler ' + '© OpenStreetMap contributors', maxZoom: 20, }), }); const map = new Map({ layers: [osm, imagery], target: 'map', view: new View({ center: [0, 0], zoom: 2, }), }); const swipe = document.getElementById('swipe'); imagery.on('prerender', function (event) { const gl = event.context; gl.enable(gl.SCISSOR_TEST); const mapSize = map.getSize(); // [width, height] in CSS pixels // get render coordinates and dimensions given CSS coordinates const bottomLeft = getRenderPixel(event, [0, mapSize[1]]); const topRight = getRenderPixel(event, [mapSize[0], 0]); const width = Math.round((topRight[0] - bottomLeft[0]) * (swipe.value / 100)); const height = topRight[1] - bottomLeft[1]; gl.scissor(bottomLeft[0], bottomLeft[1], width, height); }); imagery.on('postrender', function (event) { const gl = event.context; gl.disable(gl.SCISSOR_TEST); }); const listener = function () { map.render(); }; swipe.addEventListener('input', listener); swipe.addEventListener('change', listener);