在Cesium中移动KML对象而不闪烁

时间:2015-12-28 17:53:54

标签: javascript kml cesium

我正在将现有的Google地球应用程序移植到Cesium。应用程序跟踪车辆的位置。首先加载一些基本kml以显示车辆的整体轨迹。然后用一个显示车辆当前位置的地标不断更新kml文件。

目前,我可以通过添加更新的kml并在每次更改时移除旧的kml来实现在Cesium中移动placmark的预期效果。问题是,每次重新加载地标时,地标似乎都会闪烁或出现故障。

我在Google地球中遇到了类似的问题,我通过移动现有的KML解决了问题,而不是每次更改时添加和删除。我想找到一种方法来对Cesium做同样的事情。我已经尝试查看与KmlDataSource关联的实体对象,但我看不到任何移动它们的方法。我能够找到通过场景可用的相关基元,但我无法确定如何移动它。

以下是我用来添加和删除kml的代码段。

var pparser = new DOMParser();
var newPositionDataSource = new Cesium.KmlDataSource();
var prom = newPositionDataSource.load(parser.parseFromString(testkml, "text/xml"));
viewer.dataSources.add(newPositionDataSource);

if (positionDataSource != null)
{
    Cesium.when(prom, function()
    {
        viewer.dataSources.remove(positionDataSource);
    });
}
positionDataSource = newPositionDataSource;

1 个答案:

答案 0 :(得分:0)

我让这个用于地标。 Emackey的建议很好。我修改了我的代码,以便我只为地标添加一次KML。对于第一次加载新KML后的每个位置更新,并将原始数据源实体的位置设置为等于新KML数据源的位置。

这允许地标平滑移动而不会出现故障,并省去了手动解析KML的麻烦。它适用于地标。

不幸的是,我有几条连接地标的线路,它们在更新时仍然会出现故障。如果有人对如何防止线路故障有任何想法,我很乐意阅读它们。