【发布时间】:2015-12-19 16:07:55
【问题描述】:
我们正在开展一个学校项目,其目的是创建一张地图,在该地图中,图层会根据缩放量从一个聚合级别切换到较小的聚合级别。此外,我们有几组基于需要应用的主题的图层。因此,您单击一个主题,一组基于缩放级别切换的新图层将变为活动状态,当您单击另一个主题时,另一组图层将变为活动状态并根据缩放级别进行切换。这意味着主题是排他性的,理想情况下您一次不能有多个主题处于活动状态。
我们已经尝试通过多种方式完成这项工作,但没有取得多大成功。使用 L.Control.Layers,我们无法将不同的图层组合在一个单选按钮下并让它们根据缩放进行切换,因为传单中内置的图层控件总是将它们分成单独的图层。甚至使用 L.layerGroup 组合多个图层变量或将多个图层创建为一个变量,然后使用 l.control.layer 将它们添加到地图中。
我们还尝试使用 L.easyButton (https://github.com/CliffCloud/Leaflet.EasyButton)。这允许我们将变量放在一个按钮下,并在其中添加一个基于缩放的图层切换。但是,这里的问题是我们无法在激活后停用该功能。这导致它们中的几个在一个点上处于活动状态并相互重叠。
如果可能,我们想知道是否应该使用不同的方法,或者传单控制功能或使用 easyButton 是否可以工作以及如何工作?
这是其中一个按钮的示例代码,它会出现多次但显示不同的主题:
L.easyButton( '<span class="star">★</span>', function (polygon) {
var ejerlav_polygon = new L.tileLayer.betterWms(
'http://[IP]:[PORT]/geoserver/prlayer/wms', {
layers: 'prlayer:ejerlav',
transparent: true,
styles: 'polygon',
format: 'image/png'});
var municipality_polygon = new L.tileLayer.betterWms(
'http://[IP]:[PORT]/geoserver/prlayer/wms', {
layers: 'prlayer:municipality',
transparent: true,
styles: 'polygon',
format: 'image/png'});
map.on("zoomend", function() {
if (map.getZoom() <= 10 && map.getZoom() >= 2) {
map.addLayer(municipality_polygon);
} else if (map.getZoom() > 10 || map.getZoom() < 2) {
map.removeLayer(municipality_polygon);
}
});
map.on("zoomend", function() {
if (map.getZoom() <= 11 && map.getZoom() >= 11) {
map.addLayer(ejerlav_polygon);
} else if (map.getZoom() > 11 || map.getZoom() < 11) {
map.removeLayer(ejerlav_polygon);
}
});
}).addTo(map);
【问题讨论】:
标签: zooming leaflet layer switching