Как контролировать видимость источников данных Cesium/CZML

У меня объявлен источник данных 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;

объекты не скрываются


person chatzich    schedule 27.02.2020    source источник


Ответы (2)


Проблема здесь в том, что Cesium.CzmlDataSource.load не возвращает Cesium.CzmlDataSource. Он возвращает Promise, чтобы асинхронно получить CzmlDataSource, а это совсем не одно и то же. Ваш код пытается показать или скрыть обещание, это не то, что отображается.

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

dataSourcePromise.then(function(d) { dataSource = d; });

Обратите внимание, что после выполнения приведенного выше кода источник данных будет иметь значение null в течение некоторого времени, пока браузер ожидает ответа сервера для завершения загрузки. После запуска функции обратного вызова источник данных готов.

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

Вы можете подключить обработчик кликов для кнопки-переключателя, подобной этой. Но переключатель ничего не сделает, пока источник данных не будет загружен и готов.

person emackey    schedule 27.02.2020

Сначала я должен получить результат обещания 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);

person chatzich    schedule 27.02.2020