Javascript 如何控制铯/CZML数据源的可见性

Javascript 如何控制铯/CZML数据源的可见性,javascript,angular,cesium,czml,Javascript,Angular,Cesium,Czml,我声明了一个CZML数据源: public geometryDataPromise: Cesium.CzmlDataSource; 加载组件时,我正在加载上面的端点: if(!this.store.geometryDataPromise) { this.store.geometryDataPromise = Cesium.CzmlDataSource.load(environment.apiBaseURL + `/protectedareas/geometry/all`

我声明了一个CZML数据源:

public geometryDataPromise: Cesium.CzmlDataSource;
加载组件时,我正在加载上面的端点:

    if(!this.store.geometryDataPromise) {
        this.store.geometryDataPromise = Cesium.CzmlDataSource.load(environment.apiBaseURL + `/protectedareas/geometry/all`);
    }
所有渲染对象都显示在地形上,但尝试按照说明执行以下操作:

this.store.geometryDataPromise.show = false;

对象未被隐藏

这里的问题是
铯.CzmlDataSource.load
不返回
铯.CzmlDataSource
。它返回一个
Promise
,异步获取一个
CzmlDataSource
,这根本不是一回事。您的代码试图显示或隐藏承诺,但这不是显示的内容

var dataSourcePromise = Cesium.CzmlDataSource.load( ... );
var dataSource = null;

dataSourcePromise.then(function(d) { dataSource = d; });
请注意,在上述代码运行之后,当浏览器等待服务器的响应完成下载时,dataSource将在一段时间内保持
null
。一旦调用回调函数,数据源就准备好了

function onClick() {
    if (dataSource !== null) {
        dataSource.show = !dataSource.show;
    }
}

您可以为这样的切换按钮连接一个单击处理程序。但是在数据源下载并准备好之前,切换不会起任何作用。

首先,我必须获取铯.CzmlDataSource.load的结果

Cesium.when(Cesium.CzmlDataSource.load(environment.apiBaseURL + `/protectedareas/geometry/all`), result => {
        this.sources = result;
        this.viewer.dataSources.add(this.sources);

});
然后只要改变它的恶魔
show
,当可见性改变时


this.store.sourceVisibility.subscribe(visibility=>this.sources.show=visibility)