Javascript 铯移动广告牌

Javascript 铯移动广告牌,javascript,cesium,Javascript,Cesium,我正在测试Cesiumjs,看看它是否能反映一个近乎实时的经验——例如:飞机的位置 为此,我需要画广告牌,让它们移动——我知道铯是可能的,只是不知道如何移动 代码如下所示: var billboards = scene.primitives.add(new Cesium.BillboardCollection()); var billboard = { image : '/path/to/logo.png', position : Cesium.Cartesian3.fromDe

我正在测试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);
我的问题是如何改变广告牌的位置。我找不到可以解释的ant文档

我想做:

billboard.position = ... //new position
但是铯怎么知道我已经改变了位置属性,除非它以某种方式把那个参考变成了一个可观察的物体

那么如何更新位置呢


谢谢。

铯确实在监听广告牌的变化。位置 (),因此,对于应用程序来说,简单地写一个新位置是正确的行为

请注意,您必须一次写入整个position,这意味着您不能写入
billboard.position.x
。相反,保留一个“scratch”Cartesian3(不要以60fps的速度创建一个
新的
动画帧),写入scratch变量的
x、y、z
属性,然后将scratch变量指定给
billboard.position
。您可以在源代码中看到,分配的值将被克隆到另一个预先存在的Cartesian3中,因此您可以立即重用scratch变量

下面是一个例子:

// Just once at app startup.  Don't call "new" at 60fps.
var scratchCartesian3 = new Cesium.Cartesian3();

var ellipsoid = viewer.scene.mapProjection.ellipsoid;

function onTick() {
    // This is safe to call at 60fps.
    billboard.position = Cesium.Cartesian3.fromDegrees(
        lon, lat, alt, ellipsoid, scratchCartesian3);
}

另外请注意,您的问题和上面的答案都集中在铯API的“图形原语”层上。Cesium有一个更高的层,称为“”API,如果您希望Cesium处理用户可选择对象的概念以及弹出式描述等,则可以使用该层。下面展示了如何将公告牌添加为实体的属性,而不是原语。这允许您向同一实体添加其他属性,例如名称、描述、标签、三维模型等,并使它们都从同一位置属性进行控制,并使Cesium处理弹出式描述。实体的“位置”属性比基本体更复杂,例如,它可以是或。这允许实体在显示时间轴时随时间改变位置。

只有铯小部件系统使用敲除,它不在原语或实体API中的任何地方使用。设置公告牌位置会导致设置脏标志,这是铯知道如何更新它的。感谢澄清,我编辑了答案中的措辞。