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>
我在显示和打开和关闭图层时遇到困难。我已经按照教程进行操作: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>