import { Base_default, Property_default } from "./chunk-AYBYZSAV.js"; import { View_default } from "./chunk-YLJGUH5Z.js"; import { assert } from "./chunk-QFCIXVZ3.js"; import { Event_default, listen, unlistenByKey } from "./chunk-NGFXCWUF.js"; import { EventType_default } from "./chunk-K25ZO44T.js"; import { intersects } from "./chunk-SRXHWJOY.js"; // node_modules/ol/render/EventType.js var EventType_default2 = { /** * Triggered before a layer is rendered. * @event module:ol/render/Event~RenderEvent#prerender * @api */ PRERENDER: "prerender", /** * Triggered after a layer is rendered. * @event module:ol/render/Event~RenderEvent#postrender * @api */ POSTRENDER: "postrender", /** * Triggered before layers are composed. When dispatched by the map, the event object will not have * a `context` set. When dispatched by a layer, the event object will have a `context` set. Only * WebGL layers currently dispatch this event. * @event module:ol/render/Event~RenderEvent#precompose * @api */ PRECOMPOSE: "precompose", /** * Triggered after layers are composed. When dispatched by the map, the event object will not have * a `context` set. When dispatched by a layer, the event object will have a `context` set. Only * WebGL layers currently dispatch this event. * @event module:ol/render/Event~RenderEvent#postcompose * @api */ POSTCOMPOSE: "postcompose", /** * Triggered when rendering is complete, i.e. all sources and tiles have * finished loading for the current viewport, and all tiles are faded in. * The event object will not have a `context` set. * @event module:ol/render/Event~RenderEvent#rendercomplete * @api */ RENDERCOMPLETE: "rendercomplete" }; // node_modules/ol/layer/Layer.js var Layer = class extends Base_default { /** * @param {Options} options Layer options. */ constructor(options) { const baseOptions = Object.assign({}, options); delete baseOptions.source; super(baseOptions); this.on; this.once; this.un; this.mapPrecomposeKey_ = null; this.mapRenderKey_ = null; this.sourceChangeKey_ = null; this.renderer_ = null; this.sourceReady_ = false; this.rendered = false; if (options.render) { this.render = options.render; } if (options.map) { this.setMap(options.map); } this.addChangeListener( Property_default.SOURCE, this.handleSourcePropertyChange_ ); const source = options.source ? ( /** @type {SourceType} */ options.source ) : null; this.setSource(source); } /** * @param {Array} [array] Array of layers (to be modified in place). * @return {Array} Array of layers. * @override */ getLayersArray(array) { array = array ? array : []; array.push(this); return array; } /** * @param {Array} [states] Optional list of layer states (to be modified in place). * @return {Array} List of layer states. * @override */ getLayerStatesArray(states) { states = states ? states : []; states.push(this.getLayerState()); return states; } /** * Get the layer source. * @return {SourceType|null} The layer source (or `null` if not yet set). * @observable * @api */ getSource() { return ( /** @type {SourceType} */ this.get(Property_default.SOURCE) || null ); } /** * @return {SourceType|null} The source being rendered. */ getRenderSource() { return this.getSource(); } /** * @return {import("../source/Source.js").State} Source state. * @override */ getSourceState() { const source = this.getSource(); return !source ? "undefined" : source.getState(); } /** * @private */ handleSourceChange_() { this.changed(); if (this.sourceReady_ || this.getSource().getState() !== "ready") { return; } this.sourceReady_ = true; this.dispatchEvent("sourceready"); } /** * @private */ handleSourcePropertyChange_() { if (this.sourceChangeKey_) { unlistenByKey(this.sourceChangeKey_); this.sourceChangeKey_ = null; } this.sourceReady_ = false; const source = this.getSource(); if (source) { this.sourceChangeKey_ = listen( source, EventType_default.CHANGE, this.handleSourceChange_, this ); if (source.getState() === "ready") { this.sourceReady_ = true; setTimeout(() => { this.dispatchEvent("sourceready"); }, 0); } } this.changed(); } /** * @param {import("../pixel").Pixel} pixel Pixel. * @return {Promise>} Promise that resolves with * an array of features. */ getFeatures(pixel) { if (!this.renderer_) { return Promise.resolve([]); } return this.renderer_.getFeatures(pixel); } /** * @param {import("../pixel").Pixel} pixel Pixel. * @return {Uint8ClampedArray|Uint8Array|Float32Array|DataView|null} Pixel data. */ getData(pixel) { if (!this.renderer_ || !this.rendered) { return null; } return this.renderer_.getData(pixel); } /** * The layer is visible on the map view, i.e. within its min/max resolution or zoom and * extent, not set to `visible: false`, and not inside a layer group that is set * to `visible: false`. * @param {View|import("../View.js").ViewStateLayerStateExtent} [view] View or {@link import("../Map.js").FrameState}. * Only required when the layer is not added to a map. * @return {boolean} The layer is visible in the map view. * @api */ isVisible(view) { let frameState; const map = this.getMapInternal(); if (!view && map) { view = map.getView(); } if (view instanceof View_default) { frameState = { viewState: view.getState(), extent: view.calculateExtent() }; } else { frameState = view; } if (!frameState.layerStatesArray && map) { frameState.layerStatesArray = map.getLayerGroup().getLayerStatesArray(); } let layerState; if (frameState.layerStatesArray) { layerState = frameState.layerStatesArray.find( (layerState2) => layerState2.layer === this ); if (!layerState) { return false; } } else { layerState = this.getLayerState(); } const layerExtent = this.getExtent(); return inView(layerState, frameState.viewState) && (!layerExtent || intersects(layerExtent, frameState.extent)); } /** * Get the attributions of the source of this layer for the given view. * @param {View|import("../View.js").ViewStateLayerStateExtent} [view] View or {@link import("../Map.js").FrameState}. * Only required when the layer is not added to a map. * @return {Array} Attributions for this layer at the given view. * @api */ getAttributions(view) { var _a; if (!this.isVisible(view)) { return []; } const getAttributions = (_a = this.getSource()) == null ? void 0 : _a.getAttributions(); if (!getAttributions) { return []; } const frameState = view instanceof View_default ? view.getViewStateAndExtent() : view; let attributions = getAttributions(frameState); if (!Array.isArray(attributions)) { attributions = [attributions]; } return attributions; } /** * In charge to manage the rendering of the layer. One layer type is * bounded with one layer renderer. * @param {?import("../Map.js").FrameState} frameState Frame state. * @param {HTMLElement} target Target which the renderer may (but need not) use * for rendering its content. * @return {HTMLElement|null} The rendered element. */ render(frameState, target) { const layerRenderer = this.getRenderer(); if (layerRenderer.prepareFrame(frameState)) { this.rendered = true; return layerRenderer.renderFrame(frameState, target); } return null; } /** * Called when a layer is not visible during a map render. */ unrender() { this.rendered = false; } /** @return {string} Declutter */ getDeclutter() { return void 0; } /** * @param {import("../Map.js").FrameState} frameState Frame state. * @param {import("../layer/Layer.js").State} layerState Layer state. */ renderDeclutter(frameState, layerState) { } /** * When the renderer follows a layout -> render approach, do the final rendering here. * @param {import('../Map.js').FrameState} frameState Frame state */ renderDeferred(frameState) { const layerRenderer = this.getRenderer(); if (!layerRenderer) { return; } layerRenderer.renderDeferred(frameState); } /** * For use inside the library only. * @param {import("../Map.js").default|null} map Map. */ setMapInternal(map) { if (!map) { this.unrender(); } this.set(Property_default.MAP, map); } /** * For use inside the library only. * @return {import("../Map.js").default|null} Map. */ getMapInternal() { return this.get(Property_default.MAP); } /** * Sets the layer to be rendered on top of other layers on a map. The map will * not manage this layer in its layers collection. This * is useful for temporary layers. To remove an unmanaged layer from the map, * use `#setMap(null)`. * * To add the layer to a map and have it managed by the map, use * {@link module:ol/Map~Map#addLayer} instead. * @param {import("../Map.js").default|null} map Map. * @api */ setMap(map) { if (this.mapPrecomposeKey_) { unlistenByKey(this.mapPrecomposeKey_); this.mapPrecomposeKey_ = null; } if (!map) { this.changed(); } if (this.mapRenderKey_) { unlistenByKey(this.mapRenderKey_); this.mapRenderKey_ = null; } if (map) { this.mapPrecomposeKey_ = listen( map, EventType_default2.PRECOMPOSE, this.handlePrecompose_, this ); this.mapRenderKey_ = listen(this, EventType_default.CHANGE, map.render, map); this.changed(); } } /** * @param {import("../events/Event.js").default} renderEvent Render event * @private */ handlePrecompose_(renderEvent) { const layerStatesArray = ( /** @type {import("../render/Event.js").default} */ renderEvent.frameState.layerStatesArray ); const layerState = this.getLayerState(false); assert( !layerStatesArray.some( (arrayLayerState) => arrayLayerState.layer === layerState.layer ), "A layer can only be added to the map once. Use either `layer.setMap()` or `map.addLayer()`, not both." ); layerStatesArray.push(layerState); } /** * Set the layer source. * @param {SourceType|null} source The layer source. * @observable * @api */ setSource(source) { this.set(Property_default.SOURCE, source); } /** * Get the renderer for this layer. * @return {RendererType|null} The layer renderer. */ getRenderer() { if (!this.renderer_) { this.renderer_ = this.createRenderer(); } return this.renderer_; } /** * @return {boolean} The layer has a renderer. */ hasRenderer() { return !!this.renderer_; } /** * Create a renderer for this layer. * @return {RendererType} A layer renderer. * @protected */ createRenderer() { return null; } /** * This will clear the renderer so that a new one can be created next time it is needed */ clearRenderer() { if (this.renderer_) { this.renderer_.dispose(); delete this.renderer_; } } /** * Clean up. * @override */ disposeInternal() { this.clearRenderer(); this.setSource(null); super.disposeInternal(); } }; function inView(layerState, viewState) { if (!layerState.visible) { return false; } const resolution = viewState.resolution; if (resolution < layerState.minResolution || resolution >= layerState.maxResolution) { return false; } const zoom = viewState.zoom; return zoom > layerState.minZoom && zoom <= layerState.maxZoom; } var Layer_default = Layer; // node_modules/ol/render/Event.js var RenderEvent = class extends Event_default { /** * @param {import("./EventType.js").default} type Type. * @param {import("../transform.js").Transform} [inversePixelTransform] Transform for * CSS pixels to rendered pixels. * @param {import("../Map.js").FrameState} [frameState] Frame state. * @param {?(CanvasRenderingContext2D|OffscreenCanvasRenderingContext2D|WebGLRenderingContext)} [context] Context. */ constructor(type, inversePixelTransform, frameState, context) { super(type); this.inversePixelTransform = inversePixelTransform; this.frameState = frameState; this.context = context; } }; var Event_default2 = RenderEvent; export { Event_default2 as Event_default, EventType_default2 as EventType_default, inView, Layer_default }; //# sourceMappingURL=chunk-I6K7MRGV.js.map