2

根据 Cesium API,要切换资产广告牌(或标签)的可见性,您只需将 billboard.show 属性分配为 false。当我试图这样做时,铯会出错

An error occurred while rendering.  Rendering has stopped.
TypeError: undefined is not a function
...

cesium-dev google 小组的讨论包括一些示例代码来打开/关闭广告牌的可见性。如果您尝试在 CZML 中的实体上显示 = false(此示例不使用 CZML),则相同的代码将不起作用。

这是我尝试过的

var asset = loadedCZML.entities.getById(id);
asset.billboard.show = false; //Error!

(加载的CZML是一个Cesium.CzmlDataSource

4

1 回答 1

1

API 文档没有提到show您的实体的属性可能并不总是一个简单的布尔属性(如 API 所述)。

当使用CzmlDataSource'sentity时,该show属性被认为是 a TimeIntervalCollectionProperty(至少在我的 CZML 中是这样)。

Cesium 中的所有属性都必须实现一个getValue函数,当您设置 时show = false,该属性的设置器无法将 false 应用于 aTimeIntervalCollectionProperty而是将整个属性替换为 的简单值false

该错误undefined is not a function是由于 cesium 渲染调用试图在我们的show属性上调用 getValue() 造成的。无论如何,修复很简单:

而不是这个:

asset.billboard.show = false; //error

做这个:

asset.billboard.show = new Cesium.ConstantProperty(false);

PS:这适用于其他 Cesium 属性,请参见以下示例:

entity.billboard.image = pinBuilder.fromColor(Cesium.Color.CRIMSON, 48); //error

//do this instead
entity.billboard.image = new Cesium.ConstantProperty(pinBuilder.fromColor(Cesium.Color.CRIMSON, 48).toDataURL());
于 2014-11-20T20:35:49.887 回答