Cesium - 将scaleByDistance用于通过CZML创建的广告牌

时间:2015-02-13 15:49:52

标签: javascript cesium czml

我试图将图标显示为广告牌并按距离缩放。我可以管理得很好,但是一旦我通过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的方法。

2 个答案:

答案 0 :(得分:3)

CZML尚未支持嵌入其中的scaleByDistance。但是你仍然可以在帖子的底部做你建议的,找到ID并以这种方式应用属性。

请记住loadUrl是异步的,因此您无法在加载ID之前获取该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));
});

答案 1 :(得分:1)

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

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

我自己测试了此功能,并且可以正常工作。

来源: