mapbox 更改源 属性

mapbox change source property

我想用 mapbox 制作一个簇层,是的,我做到了 :D。但我希望能够将其关闭

所以我正在制作一个来源

        const source = {
            type: "geojson",
            data: {
                "type": "FeatureCollection",
                "features": []
            },
            cluster: true,
            clusterRadius: 10
        }
        this.map.addSource(id, source);

现在我可以设置数据了:

        this.map.getSource(this.id).setData({
            "type": "FeatureCollection",
            "features": this.createInnerCircles()
        })

在此之后,我将设置簇和圆的图层。现在集群正在运行

但是现在:如何从源代码中将 cluster: true 设置为 false。好吧,也许我可以扔掉源代码并制作一个新的,但那太丑了。

所以丑陋的方式是

        const SOURCE = this.map.getSource(id);
        SOURCE._options.cluster = false;
        this.map.removeSource(id);
        this.map.addSource(id, SOURCE._options);

糟糕,这不起作用,现在我得到:

Source "test" cannot be removed while layer "test-outer" is using it.

更新

我能够启用/禁用集群感谢@Steve Bennett

    setCluster(isVisable, clusterRadius = 10) {
        const style = this.map.getStyle()
        style.sources.test.cluster = isVisable;
        if(isVisable) {
            style.sources.test.clusterRadius = clusterRadius;
        }
        this.map.setStyle(style)
    }

更改没有特定方法的属性的一般方法是:

const style = map.getStyle()

style.sources.X.Y = Z;

map.setStyle(style)

Mapbox GL JS 将执行差异,然后进行您需要的更改。