Загрузить определенную часть файла 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;
Другие вопросы по тегам