Загрузить определенную часть файла CZML в соответствии с идентификатором
В демонстрации Cesium здесь у вас есть возможность выбрать, какие данные вы хотите просмотреть, просто изменив, откуда вы читаете данные.
Я хочу, чтобы кнопка «Спутники» отображала только те, у кого «Спутник» в идентификаторе из файла CZML, и игнорировала остальные, в настоящее время мой код выглядит так:
Sandcastle.addDefaultToolbarButton("Satellites", function () {
Cesium.CzmlDataSource.load("../SampleData/simple.czml").then(function(dataSource) {
viewer.clock.multiplier = 1;
var entity = dataSource.entities.getById("Satellite");
viewer.dataSources.add(entity);
});
viewer.camera.flyHome(0);
});
Однако, когда я пытаюсь это сделать, ничего не отображается. Я также пробовал только с транспортным средством (в нем есть только 1 объект, а идентификатор - это именно «транспортное средство»), поэтому я мог проверить, правильно ли он получает данные, однако я получил эту ошибку: «TypeError: Не удается прочитать свойства неопределенного (чтение ' длина')" при нажатии на кнопку автомобиля
Вот мой раздел для автомобиля:
Sandcastle.addToolbarButton("Vehicle", function () {
Cesium.CzmlDataSource.load("../SampleData/Vehicle.czml").then(function(dataSource) {
viewer.clock.multiplier = 1;
var entity = dataSource.entities.getById("Vehicle");
viewer.dataSources.add(entity);
});
viewer.scene.camera.setView({
destination: Cesium.Cartesian3.fromDegrees(-116.52, 35.02, 95000),
orientation: {
heading: 6,
},
});
1 ответ
Вот исправленная демка Sandcastle .
Некоторые проблемы в оригинале:
У вас плохой идентификатор в одном
"Satellite"
вместо"Satellite/Geoeye1"
, поэтому сущность не найдена.Вы не должны передавать отдельный объект в
viewer.dataSources.add()
, вместо этого используйтеviewer.entities.add()
для этого.Самая важная, часто упускаемая из виду проблема, это неправильно установленные часы. Эти объекты существуют в течение определенного периода времени (несколько лет назад, когда был впервые создан пример сценария), и в настоящее время их не существует. Обычно при добавлении источника данных в средство просмотра часы автоматически обновляются, но в этом случае добавление одного объекта этого не делает, поэтому часы показывают текущее время, а не время существования объекта. Есть несколько способов исправить это, но я выбрал этот:
viewer.clock.currentTime = dataSource.clock.startTime;