加载后如何访问 CzmlDataSource 中的实体

How to access entities in CzmlDataSource after loading

我想访问我的 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;
         });

这段代码工作正常,但我想给观众选择相机的选项,然后我需要在完成加载后访问 Vehicle,我尝试了几种方法,但没有一种有效。我有一些例子如下:

  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 文件中已有的实体定义实体吗?

您的第二个代码块不起作用的原因似乎只是因为您没有等待 czmlDataSource 的异步加载。

尝试修改您的第二个代码块,删除最后两行并将它们包装在按钮的 onClick 回调中。如果在加载 CZML 之前单击按钮,myEntity 将是未定义的并且相机不会改变。如果您在加载 CZML 后再次单击同一个按钮,它应该可以正常工作。