我已经编写了一些函数来在Cesium中绘制可拖动和静态点。但是,当我们一起使用时,我遇到了一个大问题。
我可以通过点击地图绘制可拖动的点,然后通过单击并拖动来移动它们。但是如果我在绘制可拖动点后绘制静态点,则可拖动点会跳转到静态点的位置!我仍然可以拖动点,但它总是快速回到静态点位置。
这是一个Sandcastle演示来说明我的问题 - http://cesiumjs.org/Cesium/Apps/Sandcastle/?src=Hello%20World.html&label=Showcases&gist=54a2252d95768ca89d23948ad010356a
在此示例中,地图上的任何点击都会创建一个可拖动的点(红点)。脚本末尾有两个超时,其中一个将在5秒后绘制一个静态点,另一个将在10秒后在不同位置绘制一个静态点。静态点是紫色的,比可拖动的点小很多。
正如您所看到的,如果您在前5秒中绘制一个可拖动的点,它将跳转到第一个静态点的位置。
发生了什么?!
答案 0 :(得分:0)
此:
let positionCallback = () => { return waypointPosition; };
应该是:
let positionCallback = (time, result) => { return waypointPosition.clone(result); };
原因是CallbackProperty回调的签名(https://cesiumjs.org/Cesium/Build/Documentation/CallbackProperty.html#~Callback) 需要时间和结果。如果提供了结果,那么你必须存储 结果到现有对象并返回它(否则你 应该返回一个新的值)。调用clone(结果)就是这样。 之所以这样做是因为我们大量使用划痕 变量以避免内存分配。
Sandcastle现在可以按要求运作 - http://cesiumjs.org/Cesium/Apps/Sandcastle/index.html?src=Hello%20World.html&label=Showcases&gist=54a2252d95768ca89d23948ad010356a