Как контролировать видимость для источников данных Cesium / CZML - PullRequest
1 голос
/ 27 февраля 2020

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

объекты не скрыты

Ответы [ 2 ]

2 голосов
/ 27 февраля 2020

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

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

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

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

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

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

0 голосов
/ 27 февраля 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);

...