传单 - 允许以高于最大缩放的高度切换到另一个基层



我有2个基层(mapsatellite),用户可以在之间切换。卫星层的最大变焦比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。

有没有某种方法可以通过传单的层控制来实现这一目标?还是我必须构建自定义层控件?

有没有某种方法可以通过传单的层控制?

不是默认行为,否。如果检查源代码的相关部分,您会看到L.Control.Layers 始终 在该图层不超出其min/maxzoom范围时,请禁用复选框/无线电按钮。

或我必须构建自定义层控件?

是的,您可以创建自己的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);

您可以在此plunkr中检查一个工作示例。

让您在Zooms上选择的mapLayer在19-20上进行选择的一种简单的解决方法是在18岁时使用瓷砖层maxNativeZoom选项,并将您的maxZoom增加到20。

。 。

然后,如果选择mapLayer时,如果您仍然要自动将缩放缩小回18,请在MAP "baselayerchange"事件上使用侦听器,请检查map.getZoom()并根据需要进行修改(map.setZoom(18))。

>

相关内容

最新更新