2014-11-20 203 views
1

根據Cesium API,要切換資產廣告牌(或標籤)的可見性,您可以簡單地將billboard.show屬性指定爲false。當我試圖做到這一點,銫將與如何切換CZML實體廣告牌的可見性屬性(billboard.show)?

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

This discussion從銫-dev的谷歌組誤差包括一些示例代碼來切換廣告牌能見度的開/關。如果您嘗試在CZML實體上顯示= false(此示例不使用CZML),則相同的代碼不起作用。

這裏是我試過

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

(loadedCZML是Cesium.CzmlDataSource

回答

1

的API文檔的不提,你的實體的show屬性可能並不總是一個簡單的布爾屬性(如該API描述)。

當與CzmlDataSourceentity工作時,show特性被認爲是TimeIntervalCollectionProperty(至少這是我的CZML)。

銫所有屬性必須實現一個getValue功能,當你去設置你的show = false,該屬性的setter方法無法應用虛假的TimeIntervalCollectionProperty,而是替換的false一個簡單的值全部財產。

錯誤undefined is not a function是銫渲染調用試圖調用我們的show屬性上的getValue()的結果。無論如何,解決方法是簡單的:

取而代之的是:

asset.billboard.show = false; //error

這樣做:

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

PS:這適用於其他銫性能,請看下面的例子:

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());