466 lines
13 KiB
JavaScript
466 lines
13 KiB
JavaScript
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<SourceType>} 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<import("./Layer.js").default>} [array] Array of layers (to be modified in place).
|
|
* @return {Array<import("./Layer.js").default>} Array of layers.
|
|
* @override
|
|
*/
|
|
getLayersArray(array) {
|
|
array = array ? array : [];
|
|
array.push(this);
|
|
return array;
|
|
}
|
|
/**
|
|
* @param {Array<import("./Layer.js").State>} [states] Optional list of layer states (to be modified in place).
|
|
* @return {Array<import("./Layer.js").State>} 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<Array<import("../Feature").FeatureLike>>} 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<string>} 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
|