maplair
Version:
JavaScript library for mobile-friendly interactive maps
58 lines (57 loc) • 1.47 kB
JavaScript
import { setOptions, stamp } from "../core/Util.js";
import { Layer } from "./Layer.js";
//#region src/layer/LayerGroup.js
var LayerGroup = class LayerGroup extends Layer {
constructor(layers, options) {
super();
setOptions(this, options);
this._layers = {};
for (const layer of layers ?? []) this.addLayer(layer);
this.callInitHooks(LayerGroup);
}
addLayer(layer) {
const id = this.getLayerId(layer);
this._layers[id] = layer;
this._map?.addLayer(layer);
return this;
}
removeLayer(layer) {
const id = layer in this._layers ? layer : this.getLayerId(layer);
if (this._map && this._layers[id]) this._map.removeLayer(this._layers[id]);
delete this._layers[id];
return this;
}
hasLayer(layer) {
return (typeof layer === "number" ? layer : this.getLayerId(layer)) in this._layers;
}
clearLayers() {
return this.eachLayer(this.removeLayer, this);
}
onAdd(map) {
this.eachLayer(map.addLayer, map);
}
onRemove(map) {
this.eachLayer(map.removeLayer, map);
}
eachLayer(method, context) {
for (const layer of Object.values(this._layers)) method.call(context, layer);
return this;
}
getLayer(id) {
return this._layers[id];
}
getLayers() {
const layers = [];
this.eachLayer(layers.push, layers);
return layers;
}
setZIndex(zIndex) {
return this.eachLayer((l) => l.setZIndex?.(zIndex));
}
getLayerId(layer) {
return stamp(layer);
}
};
//#endregion
export { LayerGroup };
//# sourceMappingURL=LayerGroup.js.map