1

我很难加载我的 czml 文件而不将其内容复制到 Cesium 中的 JS 脚本中。我想使用它的 url 加载文件,但我无法做到。

var czml = "test_trace.czml";
var viewer = new Cesium.Viewer("cesiumContainer", {terrainProvider: Cesium.createWorldTerrain(), baseLayerPicker: false, shouldAnimate: true,});

viewer.dataSources.add(Cesium.CzmlDataSource.load(czml)).then(function (ds) {
    viewer.trackedEntity = ds.entities.getById("path");
});

其中 czml 不是文件的内容,而是文件本身。任何想法 ?

非常感谢

4

1 回答 1

0

编辑:一个代码片段被添加到包含一个小错误的原始问题中。该.then子句需要一个 Promise,由 . 返回.load但不由 . 返回.add。我推荐这个措辞:

Cesium.CzmlDataSource.load(czml).then(function (ds) {
    viewer.dataSources.add(ds);
    viewer.trackedEntity = ds.entities.getById("path");
});

在上面,.load返回承诺,并.then等待承诺解决。然后将解析的数据源添加到查看器,并选择一个被跟踪的实体。这是一个带有跟踪的现场演示


原答案

确保czml是一个包含 URL 的字符串。此外,需要将生成的 DataSource 添加到查看器中以使其可见。检查控制台是否有错误,以查看 URL 是否无效或应用程序无法访问。

这是一个现场演示

此演示中的关键行是:

var viewer = new Cesium.Viewer("cesiumContainer", {
  shouldAnimate: true,
});

viewer.dataSources.add(
  Cesium.CzmlDataSource.load("../SampleData/simple.czml")
);

在这种情况下,Web 服务器在列出的相对 URL 处提供 CZML 文件。

于 2021-11-10T15:01:36.993 回答