Javascript 如何在地图框图层切换中使featureLayer处于非活动状态?
我有一个简单的功能层和瓷砖层切换。仅对featureLayers关闭时,切换按钮保持激活状态。我查看了参考文档,但不明白为什么只有featureLayer不能正常工作:Javascript 如何在地图框图层切换中使featureLayer处于非活动状态?,javascript,mapbox,Javascript,Mapbox,我有一个简单的功能层和瓷砖层切换。仅对featureLayers关闭时,切换按钮保持激活状态。我查看了参考文档,但不明白为什么只有featureLayer不能正常工作: 您忘记包含自己的Mapbox accessToken:L.Mapbox.accessToken=''
您忘记包含自己的Mapbox accessToken:
L.Mapbox.accessToken=''你的问题很简单。你的研究结果是什么?你试了什么?为什么不起作用?你犯了什么错误?我建议你仔细阅读:并学习形成更好的问题,因为我们不是魔术师。@iH8是对的:你有一堆“401未经授权”的例外。某些对象未加载,因此会出现错误。请考虑安装一些类似的调试JavaScript并检查错误的方法。
var baseLayer = new L.mapbox.tileLayer('mapster.l4b4kjoi');
this.className == 'active';
var ui = document.getElementById('map-ui');
var future = L.mapbox.featureLayer('mapster.l4pda0e3');
var demand = L.mapbox.featureLayer('seamap.l50l5ecd');
var historic = L.mapbox.featureLayer('mapster.l4pda0e3');
var navwater = L.mapbox.tileLayer('mapster.ydvyqcpm');
var coasturban = L.mapbox.tileLayer('mapster.znl98dfb');
addLayer(future, L.mapbox.gridLayer('mapster.l4pda0e3'),'Future Projects', 4);
addLayer(demand, L.mapbox.gridLayer('seamap.l50l5ecd'),'Current Read-Mix Demand', 4);
addLayer(historic, L.mapbox.gridLayer('mapster.l4pda0e3'),'Historic Read-Mix Use', 4);
addLayer(navwater, L.mapbox.gridLayer('mapster.ydvyqcpm'),'Navigable Waterways', 3);
addLayer(coasturban, L.mapbox.gridLayer('mapster.znl98dfb'),'Coastal Urban', 4);
function addLayer(layer, gridlayer, name, zIndex) {
layer
.setZIndex(zIndex)
gridlayer
// add the gridControl to the active gridlayer
var gridControl = L.mapbox.gridControl(gridlayer, {follow: true}).addTo(map);
// Create a simple layer switcher that toggles layers on and off.
var item = document.createElement('li');
var link = document.createElement('a');
link.href = '#';
link.innerHTML = name;
link.onclick = function(e) {
e.preventDefault();
e.stopPropagation();
if ($(this).text() == 'Toggle All Off') {
map.eachLayer(function (layer) {
map.removeLayer(layer);
map.legendControl.removeLegend(layer.getTileJSON().legend);
});
this.className = '';
map.addLayer(baseLayer);
} else
if (map.hasLayer(layer)) {
map.removeLayer(layer);
map.removeLayer(gridlayer);
// you had "thelayer", but it should be "layer":
map.legendControl.removeLegend(layer.getTileJSON().legend);
// change two lines that were here to the following:
this.className = '';
} else {
map.addLayer(layer);
map.addLayer(gridlayer);
this.className = 'active';
map.legendControl.addLegend(layer.getTileJSON().legend);
}
};
item.appendChild(link);
ui.appendChild(item);
}