64 lines
1.7 KiB
JavaScript
64 lines
1.7 KiB
JavaScript
/**
|
|
* Only load Maplibre bundles when layer is actually added, using dynamic imports
|
|
*/
|
|
BR.MaplibreGlLazyLoader = L.Layer.extend({
|
|
initialize: function (options) {
|
|
this.options = options;
|
|
},
|
|
|
|
onAdd: function (map) {
|
|
if (!('maplibreGL' in L)) {
|
|
this._load();
|
|
} else {
|
|
this._addGlLayer();
|
|
}
|
|
return this;
|
|
},
|
|
|
|
onRemove: function (map) {
|
|
this._map.removeLayer(this.glLayer);
|
|
this.glLayer = null;
|
|
return this;
|
|
},
|
|
|
|
// needed when overlay, also requires `position: absolute` (see css)
|
|
setZIndex: function (zIndex) {
|
|
this.options.zIndex = zIndex;
|
|
return this;
|
|
},
|
|
|
|
setOpacity: function (opacity) {
|
|
if (this.glLayer) {
|
|
const glMap = this.glLayer.getMaplibreMap();
|
|
if (glMap.getLayer('hillshading')) {
|
|
glMap.setPaintProperty('hillshading', 'hillshade-exaggeration', opacity);
|
|
} else {
|
|
glMap.getCanvas().style.opacity = opacity;
|
|
}
|
|
}
|
|
},
|
|
|
|
_load: async function () {
|
|
await import('./maplibre-gl.js');
|
|
await import('./leaflet-maplibre-gl.js');
|
|
|
|
this._addGlLayer();
|
|
},
|
|
|
|
_addGlLayer: function () {
|
|
this.glLayer = L.maplibreGL(this.options);
|
|
this._map.addLayer(this.glLayer);
|
|
|
|
this._updateZIndex();
|
|
},
|
|
|
|
_updateZIndex: function () {
|
|
if (this.glLayer && this.glLayer.getContainer() && this.options.zIndex != null) {
|
|
this.glLayer.getContainer().style.zIndex = this.options.zIndex;
|
|
}
|
|
},
|
|
});
|
|
|
|
BR.maplibreGlLazyLoader = function (options) {
|
|
return new BR.MaplibreGlLazyLoader(options);
|
|
};
|