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

标签 javascript kml cesiumjs

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

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

我在 Google 地球中遇到了类似的问题,我通过移动现有的 KML 而不是每次更改时添加和删除来解决该问题。我想找到一种方法对铯做同样的事情。我尝试查看与 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;

最佳答案

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

这使得地标能够平滑移动而不会出现故障,并省去了我手动解析 KML 的麻烦。它非常适合地标。

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

关于javascript - 在Cesium中移动KML对象而不闪烁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34498315/

相关文章:

javascript - 如何使用ajax上传文件?

javascript - 整个网页的默认按钮响应 ENTER 按键

openlayers - 将 OpenLayers.Layer.WMS 导出为 GeoJSON/KML

json - 铯CZML模型: is it possible to define multiple clock intervals?

glsl - 如何在Cesium中创建虚线箭头

javascript - 如何将自定义 UI 元素(如复选框、组合等)添加到 CesiumJS 场景?

javascript - 使用时间和自定义事件进行缓冲

javascript - 为什么在此示例中放弃 'this' 是有益的

javascript - 将谷歌我的地点 map 中的数据添加到自定义谷歌地图

javascript - Google Maps API V3 - KML 图层与 JS 创建的多边形