我有两个基本层(map和satellite),用户可以在它们之间切换。卫星层的最大放大倍数为2。我使用传单提供的L.control.Layers()来管理这些图层。
var mapLayer = L.tileLayer('map-tiles.example.com/{z}/{x}/{y}.png', {
maxZoom: 18,
})
var satelliteLayer = L.tileLayer('satellite-tiles.example.com/{z}/{x}/{y}.png', {
maxZoom: 20,
})
var baseLayers = {
'Map': mapLayer,
'Satellite': satelliteLayer
}
var layerControls = L.control.layers(baseLayers).addTo(map);如果用户放大到卫星视图中的19或20,他将无法切换回地图层(单选按钮被禁用),直到他放大回18或更低。
我希望用户能够切换到地图层,即使在放大19或20。当用户切换到地图层,缩放将设置为18。
有什么办法可以通过传单的图层控制来实现这一点吗?还是必须构建自定义层控件?
发布于 2019-03-17 14:36:30
有什么办法可以通过传单的图层控制来实现这一点吗?
不是默认的行为,不是。如果您检查源代码的相关部分,您将看到当该层超出其min/maxzoom范围时,L.Control.Layers总是禁用复选框/单选按钮。
还是必须构建自定义层控件?
是的,您可以使用创建自己的子类 of L.Control.Layers禁用此功能,将相关方法替换为一个不做任何操作的函数:
L.Control.Layers.NeverDisable = L.Control.Layers.extend({
_checkDisabledLayers: function(){}
});
var myLayersControl = new L.Control.Layers.NeverDisable(
baselayers, overlayLayers, options);
myLayersControl.addTo(map);您可以检查在这个柱塞中的工作示例。
发布于 2019-03-17 02:35:52
一个简单的解决办法是在缩放19-20上选择你的mapLayer,在18的时候使用Tile Layer maxNativeZoom选项,并将你的maxZoom提高到20。
然后,如果仍然希望在选择mapLayer时自动将缩放缩小到18,请在map "baselayerchange"事件上使用侦听器,检查map.getZoom()并修改它(如果需要的话) (map.setZoom(18))。
https://stackoverflow.com/questions/55202423
复制相似问题