我正在使用以下代码加载图像:
map.on('load', function () {
map.loadImage('....png', function(error, image) {
if (error) throw error;
map.addImage('b7', image);
map.addLayer({
"id": "b7",
"type": "symbol",
"source": {
"type": "geojson",
"data": {
"type": "FeatureCollection",
"features": [{
"type": "Feature",
"geometry": {
"type": "Point",
"coordinates": [0, 0]
}
}]
}
},
"layout": {
"icon-image": "b7",
"icon-size": 0.2
}
});
});
如何在特定缩放级别上将可见性设置为无?
看起来您不能在loadImage上使用map.setLayoutProperty。在控制台中,它说:错误:地图样式中不存在图层'b7',因此无法设置样式。
为什么我尝试类似的东西:
map.setLayoutProperty( 'b7', 'visibility', 'none' );
有什么想法吗?
答案 0 :(得分:2)
关于如何解决此问题的两个建议:
首先,确保图像名称和图层名称不同。该函数可能正在寻找b7层,但是它首先找到了一个名为b7的图像(反之亦然)。无论哪种方式,都应在创建冲突变量时对其进行更改。
第二,如果这样不起作用,请尝试单独添加源而不是在图层内部添加源。
map.addSource("mySource", {
"type": "geojson",
"data": {
"type": "FeatureCollection",
"features": [{
"type": "Feature",
"geometry": {
"type": "Point",
"coordinates": [-74.981906, 41.742503]
},
"properties": {
"title": "title ",
"icon": "myImage",
}
}]
}
});
然后添加带有源的图层。
map.addLayer({
"id": "b7",
"type": "symbol",
"source": "mySource",
"layout": {
"icon-image": "myImage",
"icon-size": 0.2
}
});
您现在可以在zoomstart侦听器上调用setLayoutProperty。如果仅使用map.getZoom();
仅在特定的缩放级别上添加条件,则需要添加条件。您需要在此处设置图层的可见性,而不是图像。
map.on('zoomstart', 'b7', function(e) {
if (map.getZoom() > 12) {
map.setLayoutProperty('b7', 'visibility', 'none');
}
})
下面是代码段,如果您遇到任何问题,请告诉我。
map.on('load', function() {
map.loadImage('myImage.png', function(error, image) {
if (error) throw error;
map.addImage('myImage', image);
map.addSource("mySource", {
"type": "geojson",
"data": {
"type": "FeatureCollection",
"features": [{
"type": "Feature",
"geometry": {
"type": "Point",
"coordinates": [-73.981906, 40.742503]
},
"properties": {
"title": "title ",
"icon": "myImage",
}
}]
}
});
map.addLayer({
"id": "b7",
"type": "symbol",
"source": "mySource",
"layout": {
"icon-image": "myImage",
"icon-size": 0.2
}
});
});
});
map.on('zoomstart', 'b7', function(e) {
if (map.getZoom() > 12) {
map.setLayoutProperty('b7', 'visibility', 'none');
}
})