| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 
 | import Map from 'ol/Map.js';import OSM from 'ol/source/OSM.js';
 import TileLayer from 'ol/layer/Tile.js';
 import View from 'ol/View.js';
 import XYZ from 'ol/source/XYZ.js';
 import {getRenderPixel} from 'ol/render.js';
 
 const osm = new TileLayer({
 source: new OSM(),
 });
 
 const key = 'Get your own API key at https://www.maptiler.com/cloud/';
 const 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 aerial = new TileLayer({
 source: new XYZ({
 attributions: attributions,
 url: 'https://api.maptiler.com/tiles/satellite/{z}/{x}/{y}.jpg?key=' + key,
 maxZoom: 20,
 }),
 });
 
 const map = new Map({
 layers: [osm, aerial],
 target: 'map',
 view: new View({
 center: [0, 0],
 zoom: 2,
 }),
 });
 
 const swipe = document.getElementById('swipe');
 
 aerial.on('prerender', function (event) {
 const ctx = event.context;
 const mapSize = map.getSize();
 const width = mapSize[0] * (swipe.value / 100);
 const tl = getRenderPixel(event, [width, 0]);
 const tr = getRenderPixel(event, [mapSize[0], 0]);
 const bl = getRenderPixel(event, [width, mapSize[1]]);
 const br = getRenderPixel(event, mapSize);
 
 ctx.save();
 ctx.beginPath();
 ctx.moveTo(tl[0], tl[1]);
 ctx.lineTo(bl[0], bl[1]);
 ctx.lineTo(br[0], br[1]);
 ctx.lineTo(tr[0], tr[1]);
 ctx.closePath();
 ctx.clip();
 });
 
 aerial.on('postrender', function (event) {
 const ctx = event.context;
 ctx.restore();
 });
 
 swipe.addEventListener('input', function () {
 map.render();
 });
 
 |