mapbox leaflet javascript窗格图层控件

时间:2015-02-11 23:58:30

标签: javascript leaflet layer mapbox pane

我正在使用一种方法来创建一个“地图三明治”,我在其中有一个底图,一个覆盖图层,然后是另一个图块层(标签)在顶部(在新窗格中)。

当我尝试切换图层控件中的标签时出现问题。我可以关闭图层就好了。但是,当我尝试重新添加标签时,它们会显示在叠加层下方。

层控件似乎应该记得以同样的顺序放回图层。无论如何,有没有解决办法?

这是一个简洁地重现问题的JSFiddle。 Fiddle Layer Control Problem

var mbstyle = L.mapbox.tileLayer('statecodemog.aa380654');

var mblabels = L.mapbox.tileLayer('statecodemog.798453f5', {
'clickable': 'false'
});

var map = L.map("map", {
zoom: 8,
center: [39, -104.8],
minZoom: 4,
layers: [mbstyle]
});

//create map sandwich
var topPane = map._createPane('leaflet-top-pane', map.getPanes().mapPane);
var topLayer = mblabels.addTo(map);
topPane.appendChild(topLayer.getContainer());

var baseLayers = {
"Mapbox: Contrast Base": mbstyle
};

var groupedOverlays = {
"Labels and Borders": mblabels
};

L.control.layers(baseLayers, groupedOverlays).addTo(map);

var circle = L.circle([39, -104.8], 200000, {
color: 'red',
fillColor: '#f03',
fillOpacity: 0.5
}).addTo(map);

1 个答案:

答案 0 :(得分:4)

mbstylemblabels图层上添加明确的zIndex:

var mbstyle = L.mapbox.tileLayer('statecodemog.aa380654', {
    'zIndex': 1
});

var mblabels = L.mapbox.tileLayer('statecodemog.798453f5', {
    'clickable': 'false',
    'zIndex': 1000
});

然后告诉你的L.control.layers不要乱用zIndexes:

L.control.layers(baseLayers, groupedOverlays, {
    'autoZIndex': false
}).addTo(map);

小提琴的工作叉:http://jsfiddle.net/r01mmfse/

你甚至可以扔掉你的mapsandwich部分:

//create map sandwich
var topPane = map._createPane('leaflet-top-pane', map.getPanes().mapPane);
var topLayer = mblabels.addTo(map);
topPane.appendChild(topLayer.getContainer());

小提琴的另一个分支:http://jsfiddle.net/b8439d32/

L.TileLayer参考:http://leafletjs.com/reference.html#tilelayer

L.control.layers参考:http://leafletjs.com/reference.html#control-layers