铯 - 移动广告牌

时间:2015-07-14 06:05:35

标签: javascript cesium

我正在测试Cesiumjs以确定它是否能反映近乎实时的表现 - 例如:飞机的位置。

为此,我需要绘制广告牌并让它们移动 - 我知道这可能是铯,但不确定如何。

代码如下所示:

var billboards = scene.primitives.add(new Cesium.BillboardCollection());
var billboard = {
    image : '/path/to/logo.png',
    position : Cesium.Cartesian3.fromDegrees(-75.59777, 40.03883)
};
billboards.add(billboard);

我的问题是如何更改广告牌的位置。我无法找到可以解释的蚂蚁文档。

我以为在做:

billboard.position = ... //new position

但是铯如何知道我已经改变了位置属性,除非它以某种方式将该引用转换为可观察对象。

那么如何更新位置?

感谢。

1 个答案:

答案 0 :(得分:4)

Cesium确实会听取对billboard.position的更改 (source code here),因此应用程序只需编写新位置即可。

请注意,您必须立即写下整个职位,这意味着您可能写入billboard.position.x。相反,保持一个“划痕”Cartesian3(不要在60fps的每个动画帧中创建一个new),写入您的临时变量的x,y,z属性,然后将您的临时变量分配给{ {1}}。您可以在源代码中看到,已分配的值将被克隆到另一个预先存在的Cartesian3中,因此您可以立即重用该临时变量。

以下是一个例子:

billboard.position

另请注意,您的问题和上述答案都集中在Cesium API的“图形基元”层。 Cesium有一个更高的层,称为“Entity”API,如果您希望Cesium处理具有弹出描述等的用户可选对象的概念,您可以使用它。这里有Sandcastle demo显示如何添加广告牌作为实体的属性,而不是作为基元。这允许您将其他属性添加到同一实体,例如名称,描述,标签,3D模型等,并且可以从相同的位置属性控制它们,并让Cesium处理弹出描述。实体的position属性比基元更复杂,例如它可以是constantsampled。这允许实体在显示时间轴时随时间改变位置。