首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >传单-允许在最高变焦时切换到另一个基层。

传单-允许在最高变焦时切换到另一个基层。
EN

Stack Overflow用户
提问于 2019-03-16 23:13:00
回答 2查看 798关注 0票数 1

我有两个基本层(mapsatellite),用户可以在它们之间切换。卫星层的最大放大倍数为2。我使用传单提供的L.control.Layers()来管理这些图层。

代码语言:javascript
复制
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。

有什么办法可以通过传单的图层控制来实现这一点吗?还是必须构建自定义层控件?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-03-17 14:36:30

有什么办法可以通过传单的图层控制来实现这一点吗?

不是默认的行为,不是。如果您检查源代码的相关部分,您将看到当该层超出其min/maxzoom范围时,L.Control.Layers总是禁用复选框/单选按钮。

还是必须构建自定义层控件?

是的,您可以使用创建自己的子类 of L.Control.Layers禁用此功能,将相关方法替换为一个不做任何操作的函数:

代码语言:javascript
复制
L.Control.Layers.NeverDisable = L.Control.Layers.extend({

  _checkDisabledLayers: function(){}

});

var myLayersControl = new L.Control.Layers.NeverDisable(
    baselayers, overlayLayers, options);
myLayersControl.addTo(map);

您可以检查在这个柱塞中的工作示例

票数 2
EN

Stack Overflow用户

发布于 2019-03-17 02:35:52

一个简单的解决办法是在缩放19-20上选择你的mapLayer,在18的时候使用Tile Layer maxNativeZoom选项,并将你的maxZoom提高到20。

然后,如果仍然希望在选择mapLayer时自动将缩放缩小到18,请在map "baselayerchange"事件上使用侦听器,检查map.getZoom()并修改它(如果需要的话) (map.setZoom(18))。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55202423

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档