Как получить доступ к сущностям в 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, она должна работать нормально.