【问题标题】:Load Czml FILE in CesiumJS在 CesiumJS 中加载 Czml 文件
【发布时间】:2021-11-10 11:13:30
【问题描述】:

我很难加载我的 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 不是文件的内容,而是文件本身。有什么想法吗?

非常感谢

【问题讨论】:

    标签: javascript cesium czml


    【解决方案1】:

    编辑:将代码 sn-p 添加到包含小错误的原始问题中。 .then 子句需要一个promise,由.load 返回,但.add 不返回。我建议改用以下措辞:

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

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


    原答案

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

    这是live demo

    此演示中的关键行是:

    var viewer = new Cesium.Viewer("cesiumContainer", {
      shouldAnimate: true,
    });
    
    viewer.dataSources.add(
      Cesium.CzmlDataSource.load("../SampleData/simple.czml")
    );
    

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

    【讨论】:

    • 我已经用我当前的代码编辑了我的问题。我想我没有正确的方法来调用我的 czml 文件的 URL。你有什么想法吗?
    • 是的,您添加的代码很接近,但不太正确。我已经用替代版本编辑了我的答案以尝试。
    猜你喜欢
    • 2018-04-26
    • 1970-01-01
    • 1970-01-01
    • 2021-12-21
    • 2011-10-21
    • 2011-05-31
    • 2016-04-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多