【问题标题】:Cesium - Using scaleByDistance for a billboard created through CZMLCesium - 将 scaleByDistance 用于通过 CZML 创建的广告牌
【发布时间】:2015-02-13 15:49:52
【问题描述】:

我正在尝试将图标显示为广告牌并按距离缩放。我可以管理得很好,但是一旦我通过 CZML 而不是直接在 JS 中加载广告牌,我就无法调整广告牌的大小。

在我的 JS 文件中:

var czmlDataSource = new Cesium.CzmlDataSource();
czmlDataSource.loadUrl('airports.czml');
viewer.dataSources.add(czmlDataSource);

我的 CZML 文件显示:

[
  {
    "id":"document",
    "version":"1.0"
  },
  {
    "id":"test",
    "billboard":{
      "image":"airport.png",
      "verticalOrigin":"BOTTOM",
      "show":true
    },
    "position":{
      "cartographicDegrees":[
        0.055278, 51.505278, 0
      ]
    }
  }
]

在我使用这个之前:

entity.billboard.scaleByDistance = new Cesium.ConstantProperty(new Cesium.NearFarScalar(1.5e3, 0.3, 3.5e5, 0.0));

显然现在这行不通了。但我找不到一种方法来获取广告牌的 ID 并使用 scaleByDistance。

【问题讨论】:

    标签: javascript cesium czml


    【解决方案1】:

    CZML 尚不支持嵌入其中的scaleByDistance。但是您仍然可以按照帖子底部的建议进行操作,即找到 ID 并以这种方式应用属性。

    请记住,loadUrl 是异步的,因此在加载之前您无法获取 ID。代码如下所示:

    var czmlDataSource = new Cesium.CzmlDataSource();
    viewer.dataSources.add(czmlDataSource);
    czmlDataSource.loadUrl('airports.czml').then(function() {
        var entity = czmlDataSource.entities.getById('test');
        entity.billboard.scaleByDistance = new Cesium.ConstantProperty(
                new Cesium.NearFarScalar(1.5e3, 0.3, 3.5e5, 0.0));
    });
    

    【讨论】:

    • @StefanDenEngelsman(和 emackey):查看我的回答,这是一个更新。
    【解决方案2】:

    不再需要接受的解决方案。从那时起,Cesium 增加了对执行以下操作的支持(而不是 new Cesium.NearFarScalar,这显然不适用于只是 JSON 的 CZML):

    "scaleByDistance": { "nearFarScalar": [ 1.0, 2.0, 10000.0, 3.0 ] }

    我自己测试了这个功能,它可以工作。

    来源:

    【讨论】:

      猜你喜欢
      • 2014-02-03
      • 2019-01-20
      • 2020-07-28
      • 2022-06-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-22
      相关资源
      最近更新 更多