如何在Cesiumjs中控制数据源的可见性?

Mog*_*ier 5 kml cesium

我想在一个cesiumjs查看器中显示多个数据源,但需要允许用户选择他们希望在任何给定时间看到的数据源。例如,如果我加载kml和czml文件,如何隐藏一个文件并显示另一个文件?我找不到使用它的API的cesiumjs方法。

ema*_*key 6

2016年2月更新:已提出一个show标志,并且可以将其添加到将来的Cesium版本中。

原始答案:

当前show在dataSource上没有标志,但是很容易从可用dataSources列表中添加和删除dataSource,这用于获取显示/隐藏功能。

这是一个工作示例:加载Cesium Sandcastle Hello World示例,并将以下代码粘贴到左侧,然后单击运行(F8)。它应该在左上方显示一个具有显示/隐藏功能的复选框。

var viewer = new Cesium.Viewer('cesiumContainer');

// Create a typical CzmlDataSource.
var dataSource1 = new Cesium.CzmlDataSource();
dataSource1.load('../../SampleData/simple.czml');

// Add a checkbox at the top.
document.getElementById('toolbar').innerHTML =
    '<label><input type="checkbox" id="showCheckbox" /> Show CZML</label>';

var checkbox = document.getElementById('showCheckbox');
checkbox.addEventListener('change', function() {
    // Checkbox state changed.
    if (checkbox.checked) {
        // Show if not shown.
        if (!viewer.dataSources.contains(dataSource1)) {
            viewer.dataSources.add(dataSource1);
        }
    } else {
        // Hide if currently shown.
        if (viewer.dataSources.contains(dataSource1)) {
            viewer.dataSources.remove(dataSource1);
        }
    }
}, false);
Run Code Online (Sandbox Code Playgroud)

可以改进此代码,例如,可以是“延迟加载”,dataSource.load直到第一次显示时才调用。另外,如果dataSource已隐藏了一段时间,则必须考虑应在什么时候通过销毁dataSource而不是继续保持它来保存内存(触发新的延迟加载,如果稍后再次显示)。