我正在将现有的 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/