1

我声明了一个 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;

对象没有被隐藏

4

2 回答 2

2

这里的问题是Cesium.CzmlDataSource.load不返回Cesium.CzmlDataSource. 它返回 aPromise以异步 go get a 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;
    }
}

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

于 2020-02-27T14:17:40.153 回答
0

首先我要接受 Cesium.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);

于 2020-02-27T14:57:47.817 回答