import { Layer_default2 as Layer_default } from "./chunk-ZUI5NXIU.js"; import { Layer_default as Layer_default2 } from "./chunk-I6K7MRGV.js"; import { ViewHint_default } from "./chunk-YLJGUH5Z.js"; import { ImageState_default } from "./chunk-SHUBVYN4.js"; import { apply, compose } from "./chunk-X52LGBOS.js"; import { fromUserExtent } from "./chunk-A3RXLHYB.js"; import { containsCoordinate, containsExtent, getHeight, getIntersection, getWidth, intersects, isEmpty } from "./chunk-SRXHWJOY.js"; // node_modules/ol/renderer/canvas/ImageLayer.js var CanvasImageLayerRenderer = class extends Layer_default { /** * @param {import("../../layer/Image.js").default} imageLayer Image layer. */ constructor(imageLayer) { super(imageLayer); this.image = null; } /** * @return {import('../../DataTile.js').ImageLike} Image. */ getImage() { return !this.image ? null : this.image.getImage(); } /** * Determine whether render should be called. * @param {import("../../Map.js").FrameState} frameState Frame state. * @return {boolean} Layer is ready to be rendered. * @override */ prepareFrame(frameState) { const layerState = frameState.layerStatesArray[frameState.layerIndex]; const pixelRatio = frameState.pixelRatio; const viewState = frameState.viewState; const viewResolution = viewState.resolution; const imageSource = this.getLayer().getSource(); const hints = frameState.viewHints; let renderedExtent = frameState.extent; if (layerState.extent !== void 0) { renderedExtent = getIntersection( renderedExtent, fromUserExtent(layerState.extent, viewState.projection) ); } if (!hints[ViewHint_default.ANIMATING] && !hints[ViewHint_default.INTERACTING] && !isEmpty(renderedExtent)) { if (imageSource) { const projection = viewState.projection; const image = imageSource.getImage( renderedExtent, viewResolution, pixelRatio, projection ); if (image) { if (this.loadImage(image)) { this.image = image; } else if (image.getState() === ImageState_default.EMPTY) { this.image = null; } } } else { this.image = null; } } return !!this.image; } /** * @param {import("../../pixel.js").Pixel} pixel Pixel. * @return {Uint8ClampedArray} Data at the pixel location. * @override */ getData(pixel) { const frameState = this.frameState; if (!frameState) { return null; } const layer = this.getLayer(); const coordinate = apply( frameState.pixelToCoordinateTransform, pixel.slice() ); const layerExtent = layer.getExtent(); if (layerExtent) { if (!containsCoordinate(layerExtent, coordinate)) { return null; } } const imageExtent = this.image.getExtent(); const img = this.image.getImage(); const imageMapWidth = getWidth(imageExtent); const col = Math.floor( img.width * ((coordinate[0] - imageExtent[0]) / imageMapWidth) ); if (col < 0 || col >= img.width) { return null; } const imageMapHeight = getHeight(imageExtent); const row = Math.floor( img.height * ((imageExtent[3] - coordinate[1]) / imageMapHeight) ); if (row < 0 || row >= img.height) { return null; } return this.getImageData(img, col, row); } /** * Render the layer. * @param {import("../../Map.js").FrameState} frameState Frame state. * @param {HTMLElement} target Target that may be used to render content to. * @return {HTMLElement} The rendered element. * @override */ renderFrame(frameState, target) { const image = this.image; const imageExtent = image.getExtent(); const imageResolution = image.getResolution(); const [imageResolutionX, imageResolutionY] = Array.isArray(imageResolution) ? imageResolution : [imageResolution, imageResolution]; const imagePixelRatio = image.getPixelRatio(); const layerState = frameState.layerStatesArray[frameState.layerIndex]; const pixelRatio = frameState.pixelRatio; const viewState = frameState.viewState; const viewCenter = viewState.center; const viewResolution = viewState.resolution; const scaleX = pixelRatio * imageResolutionX / (viewResolution * imagePixelRatio); const scaleY = pixelRatio * imageResolutionY / (viewResolution * imagePixelRatio); this.prepareContainer(frameState, target); const width = this.context.canvas.width; const height = this.context.canvas.height; const context = this.getRenderContext(frameState); let clipped = false; let render = true; if (layerState.extent) { const layerExtent = fromUserExtent( layerState.extent, viewState.projection ); render = intersects(layerExtent, frameState.extent); clipped = render && !containsExtent(layerExtent, frameState.extent); if (clipped) { this.clipUnrotated(context, frameState, layerExtent); } } const img = image.getImage(); const transform = compose( this.tempTransform, width / 2, height / 2, scaleX, scaleY, 0, imagePixelRatio * (imageExtent[0] - viewCenter[0]) / imageResolutionX, imagePixelRatio * (viewCenter[1] - imageExtent[3]) / imageResolutionY ); this.renderedResolution = imageResolutionY * pixelRatio / imagePixelRatio; const dw = img.width * transform[0]; const dh = img.height * transform[3]; if (!this.getLayer().getSource().getInterpolate()) { context.imageSmoothingEnabled = false; } this.preRender(context, frameState); if (render && dw >= 0.5 && dh >= 0.5) { const dx = transform[4]; const dy = transform[5]; const opacity = layerState.opacity; if (opacity !== 1) { context.save(); context.globalAlpha = opacity; } context.drawImage(img, 0, 0, +img.width, +img.height, dx, dy, dw, dh); if (opacity !== 1) { context.restore(); } } this.postRender(this.context, frameState); if (clipped) { context.restore(); } context.imageSmoothingEnabled = true; return this.container; } }; var ImageLayer_default = CanvasImageLayerRenderer; // node_modules/ol/layer/BaseImage.js var BaseImageLayer = class extends Layer_default2 { /** * @param {Options} [options] Layer options. */ constructor(options) { options = options ? options : {}; super(options); } }; var BaseImage_default = BaseImageLayer; // node_modules/ol/layer/Image.js var ImageLayer = class extends BaseImage_default { /** * @param {import("./BaseImage.js").Options} [options] Layer options. */ constructor(options) { super(options); } /** * @override */ createRenderer() { return new ImageLayer_default(this); } /** * Get data for a pixel location. A four element RGBA array will be returned. For requests outside the * layer extent, `null` will be returned. Data for an image can only be retrieved if the * source's `crossOrigin` property is set. * * ```js * // display layer data on every pointer move * map.on('pointermove', (event) => { * console.log(layer.getData(event.pixel)); * }); * ``` * @param {import("../pixel").Pixel} pixel Pixel. * @return {Uint8ClampedArray|Uint8Array|Float32Array|DataView|null} Pixel data. * @api * @override */ getData(pixel) { return super.getData(pixel); } }; var Image_default = ImageLayer; // node_modules/ol/vec/mat4.js function create() { return [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1]; } function fromTransform(mat4, transform) { mat4[0] = transform[0]; mat4[1] = transform[1]; mat4[4] = transform[2]; mat4[5] = transform[3]; mat4[12] = transform[4]; mat4[13] = transform[5]; return mat4; } function orthographic(left, right, bottom, top, near, far, out) { out = out ?? create(); const lr = 1 / (left - right), bt = 1 / (bottom - top), nf = 1 / (near - far); out[0] = -2 * lr; out[1] = 0; out[2] = 0; out[3] = 0; out[4] = 0; out[5] = -2 * bt; out[6] = 0; out[7] = 0; out[8] = 0; out[9] = 0; out[10] = 2 * nf; out[11] = 0; out[12] = (left + right) * lr; out[13] = (top + bottom) * bt; out[14] = (far + near) * nf; out[15] = 1; return out; } function scale(m, x, y, z, out) { out = out ?? create(); out[0] = m[0] * x; out[1] = m[1] * x; out[2] = m[2] * x; out[3] = m[3] * x; out[4] = m[4] * y; out[5] = m[5] * y; out[6] = m[6] * y; out[7] = m[7] * y; out[8] = m[8] * z; out[9] = m[9] * z; out[10] = m[10] * z; out[11] = m[11] * z; out[12] = m[12]; out[13] = m[13]; out[14] = m[14]; out[15] = m[15]; return out; } function translate(m, x, y, z, out) { out = out ?? create(); let a00, a01, a02, a03, a10, a11, a12, a13, a20, a21, a22, a23; if (m === out) { out[12] = m[0] * x + m[4] * y + m[8] * z + m[12]; out[13] = m[1] * x + m[5] * y + m[9] * z + m[13]; out[14] = m[2] * x + m[6] * y + m[10] * z + m[14]; out[15] = m[3] * x + m[7] * y + m[11] * z + m[15]; } else { a00 = m[0]; a01 = m[1]; a02 = m[2]; a03 = m[3]; a10 = m[4]; a11 = m[5]; a12 = m[6]; a13 = m[7]; a20 = m[8]; a21 = m[9]; a22 = m[10]; a23 = m[11]; out[0] = a00; out[1] = a01; out[2] = a02; out[3] = a03; out[4] = a10; out[5] = a11; out[6] = a12; out[7] = a13; out[8] = a20; out[9] = a21; out[10] = a22; out[11] = a23; out[12] = a00 * x + a10 * y + a20 * z + m[12]; out[13] = a01 * x + a11 * y + a21 * z + m[13]; out[14] = a02 * x + a12 * y + a22 * z + m[14]; out[15] = a03 * x + a13 * y + a23 * z + m[15]; } return out; } function translation(x, y, z, out) { out = out ?? create(); out[0] = 1; out[1] = 0; out[2] = 0; out[3] = 0; out[4] = 0; out[5] = 1; out[6] = 0; out[7] = 0; out[8] = 0; out[9] = 0; out[10] = 1; out[11] = 0; out[12] = x; out[13] = y; out[14] = z; out[15] = 1; return out; } export { ImageLayer_default, Image_default, create, fromTransform, orthographic, scale, translate, translation }; //# sourceMappingURL=chunk-E7S7Q7VV.js.map