CesiumJS:可拖动点跳转到静态点位置

时间:2017-04-27 19:56:46

标签: javascript cesium

我已经编写了一些函数来在Cesium中绘制可拖动和静态点。但是,当我们一起使用时,我遇到了一个大问题。

我可以通过点击地图绘制可拖动的点,然后通过单击并拖动来移动它们。但是如果我在绘制可拖动点后绘制静态点,则可拖动点会跳转到静态点的位置!我仍然可以拖动点,但它总是快速回到静态点位置。

这是一个Sandcastle演示来说明我的问题 - http://cesiumjs.org/Cesium/Apps/Sandcastle/?src=Hello%20World.html&label=Showcases&gist=54a2252d95768ca89d23948ad010356a

在此示例中,地图上的任何点击都会创建一个可拖动的点(红点)。脚本末尾有两个超时,其中一个将在5秒后绘制一个静态点,另一个将在10秒后在不同位置绘制一个静态点。静态点是紫色的,比可拖动的点小很多。

正如您所看到的,如果您在前5秒中绘制一个可拖动的点,它将跳转到第一个静态点的位置。

发生了什么?!

1 个答案:

答案 0 :(得分:0)

来自Cesium团队的Rachel Hwang为我解决了这个问题。这是她的解决方案:

  

此:

 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