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

时间:2015-09-23 18:24:33

标签: cesium czml

我想访问我的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文件中的实体定义实体吗?

1 个答案:

答案 0 :(得分:1)

您的第二段代码无法正常工作的原因似乎只是因为您还没有等待czmlDataSource的异步加载。

尝试修改你的第二个代码块,取下最后两行并将它们包装在按钮onClick回调中。如果在加载CZML之前单击按钮,myEntity将不确定,摄像机将无法更改。如果在加载CZML后再次单击相同的按钮,它应该可以正常工作。