Javascript 如何控制铯/CZML数据源的可见性
我声明了一个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`
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)代码>