在我的应用中,当在混合样式的地图上添加平铺图层后,用户可以快速切换到没有前一层的路线图样式的地图时,我有一些用例。如果图块图层没有开始加载,它将在路线图上呈现。
因此,我需要停止加载图块图层或设置一些侦听器,该侦听器在加载图层时触发。尝试使用removeLayer
方法解决此问题,但无济于事。如果Mapbox gl库中有任何解决方案,请避免使用setTimeout
或任何异步js方法。
对不起,代码是私有的。例如,我的班级中有一些方法,单击按钮时可以从一种样式切换到另一种样式。如果是卫星,则将绘制图层,否则将其删除。尝试删除和隐藏。
const map = new mapboxgl.Map();
const drawLayer = (layerId: string) => {
map.addSource(`${layerId}-source`, {
'type': 'raster',
'tiles': [getTileUrl()],
'tileSize': 256
});
map.addLayer({
'id': layerId,
'type': 'raster',
'source': `${layerId}-source`,
'paint': {
'raster-opacity': opacity
}
});
};
const switchStyle = (isSatellite: boolean) => {
if (isSatellite) {
map.setOptions({
styles = 'mapbox://styles/mapbox/satellite-streets-v10'
});
drawLayer('some-layer-id');
} else {
map.setOptions({
styles = 'mapbox://styles/mapbox/streets-v11'
});
if (map.getLayer('some-layer-id')) {
map.removeLayer('some-layer-id');
map.removeSource('some-layer-id-source');
}
}
}
map.once('load', () => {
document.getElementById("switchButton").addEventListener("click", switchStyle);
});