Cesium:动态更改实体位置

4

我正在使用从数据库中获取的位置数据绘制实体。

目前我正在使用

viewer.entities.removeAll();

每次从数据库获取结果时,我希望能够删除所有实体。

由于这些实体目前是3D模型,因此在浏览器中进行这样的操作会导致过程冗长且消耗大量资源。

是否有更好的方法来更新数据,例如使用实体数组?

或者有没有一种缓存实体的方法,可以修改数据后再将其更新到显示屏上?

最终的结果是,我可以随时更改位置并看到实体在显示屏上更新。

我正在使用

viewer.entities.add({
            name : name,
            position : position,
            orientation : orientation,
            model : {
                uri : url,
                minimumPixelSize : 50
            }
        });

添加实体

1个回答

8

看一下选取演示, 在live-editor窗口中大约在第26行可以看到给entity.position赋予新的Cartesian3值。更新一个实体的速度比销毁它并创建一个新实体要快得多。

此外,如果您的数据库知道一个实体的位置随时间变化,您可以通过SampledPositionProperty提供该信息,并允许Cesium沿着路径动画实体移动。


很棒,问题是,渲染模型后我似乎找不到实际创建的实体。 - Beshman88
你能发布创建实体的代码吗?如果你正在调用 viewer.entities.add,它应该返回对新创建实体的引用。你也可以给实体一个唯一的ID来查找它。 - emackey
没错,只需在 viewer.entities.add 前面添加 var entity =,你就可以得到一个实体的引用,然后对其进行保留和修改。 - emackey
有许多实体,这是在循环中。查看器中是否有一个数组或其他东西来保存它们所有的内容? - 我真傻,刚刚意识到自己写错了。 - Beshman88
你的数据库必须有一个主键或某个唯一标识符,对吧?你可以在viewer.entities.add块中添加一个"id": "some Unique String 123",并且稍后可以使用var entity = viewer.entities.getById('some Unique String 123');进行查找。 - emackey
成功循环所有内容并获取了ID,谢谢,我会接受这个答案 :) - Beshman88

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接