1 2 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
| 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';
const osm = new TileLayer({ source: new OSM(), });
const map = new Map({ layers: [osm], target: 'map', view: new View({ center: [0, 0], zoom: 2, }), });
osm.on('prerender', function (event) { const ctx = event.context;
const matrix = event.inversePixelTransform; const canvasPixelRatio = Math.sqrt( matrix[0] * matrix[0] + matrix[1] * matrix[1] ); const canvasRotation = -Math.atan2(matrix[1], matrix[0]); ctx.save(); ctx.translate(ctx.canvas.width / 2, ctx.canvas.height / 2); ctx.rotate(-canvasRotation);
ctx.scale(3 * canvasPixelRatio, 3 * canvasPixelRatio); ctx.translate(-75, -80); ctx.beginPath(); ctx.moveTo(75, 40); ctx.bezierCurveTo(75, 37, 70, 25, 50, 25); ctx.bezierCurveTo(20, 25, 20, 62.5, 20, 62.5); ctx.bezierCurveTo(20, 80, 40, 102, 75, 120); ctx.bezierCurveTo(110, 102, 130, 80, 130, 62.5); ctx.bezierCurveTo(130, 62.5, 130, 25, 100, 25); ctx.bezierCurveTo(85, 25, 75, 37, 75, 40); ctx.clip(); ctx.translate(75, 80); ctx.scale(1 / 3 / canvasPixelRatio, 1 / 3 / canvasPixelRatio);
ctx.rotate(canvasRotation); ctx.translate(-ctx.canvas.width / 2, -ctx.canvas.height / 2); });
osm.on('postrender', function (event) { const ctx = event.context; ctx.restore(); });
|