L.control.layers and Leaflet.OpacityControls



>我有一个传单地图,其中包含一系列叠加层和使用L.control.layers设置的基础层。我想要一个不透明度滑块,Leaflet.OpacityControls,它适用于所选图层,下面有基础图层。

查看L.control.layers

for (var i = inputs.length - 1; i >= 0; i--) {
input = inputs[i];
layer = this._getLayer(input.layerId).layer;
hasLayer = this._map.hasLayer(layer);

layer

layer = NewClass {_url: "http://crores.s3.amazonaws.com/tiles/bkm/{z}/{x}/{y}.png", options: Object, _events: Object, _initHooksCalled: true, _leaflet_id: 98}

或稍后在util.js

stamp: function (obj) {
/*eslint-disable */
obj._leaflet_id = obj._leaflet_id || ++L.Util.lastId;
return obj._leaflet_id;

obj

obj = NewClass {_url: "http://crores.s3.amazonaws.com/tiles/baistDetail/{z}/{x}/{y}.png", options: Object, _events: Object, _initHooksCalled: true, _leaflet_id: 100}

除了我不确定这是显示控制面板的一部分还是当前活动的覆盖层。在任何情况下,页面加载完成后,这些变量都不可用。它们可能是,但它们对我问题的关键可能是如何访问它们。

不透明度滑块的示例针对叠加层进行了硬编码。

map.addControl(opacitySlider);
opacitySlider.setOpacityLayer(overlay);
overlay.setOpacity(0.5);

其中overlay是传单图层。如何设置所选叠加地图的overlay?L.control.layers知道,但是我如何将其传递给opacitySlider。

我不敢相信这不是一个共同的需求,但什么也没找到。

Leaflet.OpacityControls的相关部分:

L.Control.opacitySlider = L.Control.extend({
options: {
position: 'topright'
},
setOpacityLayer: function (layer) {
opacity_layer = layer;
},
onAdd: function (map) {
var opacity_slider_div = L.DomUtil.create('div', 'opacity_slider_control');
$(opacity_slider_div).slider({
orientation: "vertical",
range: "min",
min: 0,
max: 100,
value: 60,
step: 10,
start: function ( event, ui) {
//When moving the slider, disable panning.
map.dragging.disable();
map.once('mousedown', function (e) { 
map.dragging.enable();
});
},
slide: function ( event, ui ) {
var slider_value = ui.value / 100;
opacity_layer.setOpacity(slider_value);
}
});        
return opacity_slider_div;
}
});

未实现不透明度滑块的我的网站:https://stark-cove-20051.herokuapp.com/streets/156。非常测试版。

> https://gis.stackexchange.com/questions/92677/getactivelayers-for-leafletjs

我记得检查地理标志...这是两年前的答案。还没试过。响应是找到活动层。

最新更新