Mapbox gl 如何更新deckgl mapbox MapboxLayer的可见道具

Mapbox gl 如何更新deckgl mapbox MapboxLayer的可见道具,mapbox-gl,deck.gl,Mapbox Gl,Deck.gl,我有10-15个不同的layerId层,从deck.gl/mapbox子模块api引用创建,并添加到mapbox映射实例中 试图通过调用layerVisibility方法,在UI中将layerId和propertyValue传递为true/false复选框的基础上设置层的可见性,但该方法不起作用 DeckglLayer类: declare let deck; export class DeckglLayer { constructor() { } createDeckg

我有10-15个不同的layerId层,从deck.gl/mapbox子模块api引用创建,并添加到mapbox映射实例中

试图通过调用layerVisibility方法,在UI中将layerId和propertyValue传递为true/false复选框的基础上设置层的可见性,但该方法不起作用

DeckglLayer类:

declare let deck;
export class DeckglLayer {
    constructor() {

    }
    createDeckglMapboxLayer(layerId, data) {
        const { MapboxLayer, HexagonLayer } = deck;
        const options = {
            radius: 1000,
            coverage: 1,
            upperPercentile: 100
        };
    ...
    ...
        const hexagonLayer = new MapboxLayer({
            type: HexagonLayer,
            id: layerId,
            data,
            colorRange: COLOR_RANGE,
            elevationRange: [0, 20000],
            elevationScale: 4,
            extruded: true,
            getPosition: d => d.COORDINATES,
            getElevationValue: e => Math.sqrt(e[0].properties.height) * 10,
            getColorValue: this.getColorValue,
            lightSettings: LIGHT_SETTINGS,
            pickable: true,
            onHover: setTooltip,
            opacity: 1,
            visible: true,
            ...options
        });
        return hexagonLayer;
    }
}
 createMap(mapOptions) {
        this.mapInstance = new MapboxGl.Map(mapOptions);
    }

    addDeckglLayer(layerId, data) {
        var hexalayer = new DeckglLayer().createDeckglMapboxLayer(layerId, data);
        this.mapInstance.addLayer(hexalayer);
    }

    layerVisibility(layerId,propertyValue) {
        var ll: any = this.mapInstance.getLayer(layerId);
        //***********first way
        // ll.implementation.props.visible = propertyValue;
        //this.mapInstance.addLayer(ll);

        //*******second way
        //ll.setProps({ visible: propertyValue });
    }
Mapbox实例:

declare let deck;
export class DeckglLayer {
    constructor() {

    }
    createDeckglMapboxLayer(layerId, data) {
        const { MapboxLayer, HexagonLayer } = deck;
        const options = {
            radius: 1000,
            coverage: 1,
            upperPercentile: 100
        };
    ...
    ...
        const hexagonLayer = new MapboxLayer({
            type: HexagonLayer,
            id: layerId,
            data,
            colorRange: COLOR_RANGE,
            elevationRange: [0, 20000],
            elevationScale: 4,
            extruded: true,
            getPosition: d => d.COORDINATES,
            getElevationValue: e => Math.sqrt(e[0].properties.height) * 10,
            getColorValue: this.getColorValue,
            lightSettings: LIGHT_SETTINGS,
            pickable: true,
            onHover: setTooltip,
            opacity: 1,
            visible: true,
            ...options
        });
        return hexagonLayer;
    }
}
 createMap(mapOptions) {
        this.mapInstance = new MapboxGl.Map(mapOptions);
    }

    addDeckglLayer(layerId, data) {
        var hexalayer = new DeckglLayer().createDeckglMapboxLayer(layerId, data);
        this.mapInstance.addLayer(hexalayer);
    }

    layerVisibility(layerId,propertyValue) {
        var ll: any = this.mapInstance.getLayer(layerId);
        //***********first way
        // ll.implementation.props.visible = propertyValue;
        //this.mapInstance.addLayer(ll);

        //*******second way
        //ll.setProps({ visible: propertyValue });
    }
注意: -我尝试将图层布局属性可见性设置为“可见”或“无”,但在本例中,工具提示在图层隐藏时显示


你能给我建议一个最好的方法,如何为MapboxLayer的六边形图层类型设置图层属性true/false。

试试这个,它适合我

让refreshedLayers=[];
让currLayers=map.u deck.layerManager.getLayers();
let layer=currLayers[0];
//让它可见
//newLayer=layer.clone({visible:true});
//使它不可见
newLayer=layer.clone({visible:false});
刷新层。推送(新建层);
map.\uu deck.setProps({layers:refreshedLayers})