Mapbox GL JS addLayer 'source'

Mapbox GL JS addLayer 'source'

我在显示和打开和关闭图层时遇到困难。我已经按照教程进行操作:https:// www。地图框。 com /mapbox-gl-js/example/toggle-layers/

从教程和其他帮助文档来看,我不清楚我应该使用什么值。我所有的数据和样式都是使用 Mapbox Studio 创建的。我对 addLayer 'source' 、 'source-layer' 与 addSource 的不同值感到困惑。

在此帮助文件中:https://www.mapbox.com/help/mapbox-gl-js-fundamentals/ - 它没有提及 addSource,表明根本不需要它,但是当我从我的代码中排除它时,它不会正确显示地图图层 -这是为什么?

你可以在这里看到我的地图:http://www.heavenlygardens.org.uk/maps/6/index3.html

有人可以具体解释一下我做错了什么吗?

图层已经在 mapbox studio 中添加,无需再次添加

您在 mapbox studio 中提供的图层名称应该用于显示和隐藏它们

由于您在 mapbox studio 中将 Heavenly Gardens 图层命名为 hg,因此必须在此处使用相同的名称

mapboxgl.accessToken = 'pk.eyJ1IjoiZGFuaWlzaCIsImEiOiJ5dzJfM19rIn0.s8DcOH767tjpUznJhAAkaw';
var map = new mapboxgl.Map({
    container: 'map',
    style: 'mapbox://styles/daniish/cj1m2ndxd001j2spd09ne38vm',
    zoom: 14.5,
 center: [1.2964, 52.6291]
});

var toggleableLayerIds = [ 'hg', 'Churchyards' ];

for (var i = 0; i < toggleableLayerIds.length; i++) {
    var id = toggleableLayerIds[i];

    var link = document.createElement('a');
    link.href = '#';
    link.className = 'active';
    link.textContent = id;

    link.onclick = function (e) {
        var clickedLayer = this.textContent;
        e.preventDefault();
        e.stopPropagation();

        var visibility = map.getLayoutProperty(clickedLayer, 'visibility');

        if (visibility === 'visible') {
            map.setLayoutProperty(clickedLayer, 'visibility', 'none');
            this.className = '';
        } else {
            this.className = 'active';
            map.setLayoutProperty(clickedLayer, 'visibility', 'visible');
        }
    };

    var layers = document.getElementById('menu');
    layers.appendChild(link);
}
    #menu {
        background: #fff;
        position: absolute;
        z-index: 1;
        top: 10px;
        right: 10px;
        border-radius: 3px;
        width: 120px;
        border: 1px solid rgba(0,0,0,0.4);
        font-family: 'Open Sans', sans-serif;
    }

    #menu a {
        font-size: 13px;
        color: #404040;
        display: block;
        margin: 0;
        padding: 0;
        padding: 10px;
        text-decoration: none;
        border-bottom: 1px solid rgba(0,0,0,0.25);
        text-align: center;
    }

    #menu a:last-child {
        border: none;
    }

    #menu a:hover {
        background-color: #f8f8f8;
        color: #404040;
    }

    #menu a.active {
        background-color: #3887be;
        color: #ffffff;
    }

    #menu a.active:hover {
        background: #3074a4;
    }
    
            body { margin:0; padding:0; }
        #map { position:absolute; top:0; bottom:0; width:100%; }
<link href="https://api.tiles.mapbox.com/mapbox-gl-js/v0.37.0/mapbox-gl.css" rel="stylesheet"/>
<script src="https://api.tiles.mapbox.com/mapbox-gl-js/v0.37.0/mapbox-gl.js"></script>
<nav id="menu"></nav>
<div id="map"></div>