378 lines
10 KiB
JavaScript
378 lines
10 KiB
JavaScript
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<ImageSourceType>} [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<ImageSourceType>} [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
|