import Map from '../../../../src/ol/Map.js'; import MultiPolygon from '../../../../src/ol/geom/MultiPolygon.js'; import Stroke from '../../../../src/ol/style/Stroke.js'; import Style from '../../../../src/ol/style/Style.js'; import TileLayer from '../../../../src/ol/layer/Tile.js'; import View from '../../../../src/ol/View.js'; import XYZ from '../../../../src/ol/source/XYZ.js'; import {getVectorContext} from '../../../../src/ol/render.js'; const source = new XYZ({ url: '/data/tiles/osm/{z}/{x}/{y}.png', transition: 0, }); const layer = new TileLayer({ source: source, }); const geometry = new MultiPolygon([ [ [ [-80, -40], [-40, 0], [-80, 40], [-120, 0], [-80, -40], ], ], [ [ [80, -40], [120, 0], [80, 40], [40, 0], [80, -40], ], ], ]).transform('EPSG:4326', 'EPSG:3857'); const style = new Style({ stroke: new Stroke({ width: 2, color: 'blue', }), }); layer.on('prerender', function (event) { const context = event.context; context.save(); const vectorContext = getVectorContext(event); vectorContext.setStyle(style); vectorContext.drawGeometry(geometry); context.clip(); }); layer.on('postrender', function (event) { const context = event.context; context.restore(); const vectorContext = getVectorContext(event); vectorContext.setStyle(style); vectorContext.drawGeometry(geometry); }); new Map({ pixelRatio: 1, target: 'map', layers: [layer], view: new View({ center: [0, 0], zoom: 0, }), }); render();