Как получить доступ к сущностям в CzmlDataSource после загрузки

Я хочу получить доступ к некоторым объектам в моем источнике данных czml для отслеживания в средстве просмотра, но после загрузки, в качестве одного из параметров для камеры. Я знаю, что могу получить доступ к сущностям в моем файле czml во время их загрузки, но я не знаю, как получить к ним доступ после загрузки. Здесь у меня есть пример:

  var viewer = new Cesium.Viewer('cesiumContainer'); 
  var czmlDataSource = new Cesium.CzmlDataSource();
  viewer.dataSources.add(czmlDataSource);
  czmlDataSource.load('../../SampleData/Vehicle.czml').then(function(){
         var myEntity= czmlDataSource.entities.getById('Vehicle');
          viewer.trackedEntity=myEntity;
         });

Этот код работает нормально, но я хочу дать зрителю возможность выбрать камеру, затем мне нужно иметь доступ к транспортному средству после того, как я закончил загрузку, я попробовал несколько способов, но ни один из них не работает. У меня есть пример ниже:

  var viewer = new Cesium.Viewer('cesiumContainer'); 
  var czmlDataSource = new Cesium.CzmlDataSource();
  viewer.dataSources.add(czmlDataSource);
  czmlDataSource.load('../../SampleData/Vehicle.czml');
  var myEntity= czmlDataSource.entities.getById('Vehicle');
  viewer.trackedEntity=myEntity;

Знаете ли вы, как я могу определить сущность из тех, которые уже есть в моем файле czml?

1 ответ

Решение

Причина, по которой ваш второй блок кода не работает, заключается в том, что вы просто не ожидали асинхронной загрузки czmlDataSource.

Попробуйте изменить второй блок кода, уберите последние 2 строки и оберните их в кнопку обратного вызова. Если вы нажмете кнопку до загрузки CZML, myEntity будет неопределенным, и камера не изменится. Если вы снова нажмете ту же кнопку после загрузки CZML, она должна работать нормально.

Другие вопросы по тегам