我刚刚开始使用Cesium,我一直在尝试绘制推送数据。为此,我一直在使用广告牌显示轨道,并使用折线显示历史信息。但是,在某些情况下,即使已删除实体,折线也会保留在查看器上。
为了创建/更新我调用的实体(其中track是包含特定轨道的状态信息的对象,而position是Cartesian3对象)
function updateTrack(track, position) {
var entity = map.entities.getById(track.id);
if (Cesium.defined(entity)) {
entity.billboard.show = (track.curr && showTracks);
entity.position = position;
var heading = Math.atan2(track.vy, track.vx);
entity.billboard.rotation = heading - Math.PI / 2;
var polyLineposs = entity.polyline.positions._value;
polyLineposs.push(position);
entity.polyline.positions = polyLineposs;
entity.polyline.show = showTrails;
}
else {
var heading = Math.atan2(track.vy, track.vx);
map.entities.add(new Cesium.Entity({
id: track.id,
position: position,
parent: trackEntity_parent,
billboard: { image: trackIconHref, scale: 0.1, rotation: (heading - Math.PI / 2), show: showTracks },
polyline: { width: 5, material: trailMaterial, positions: [position], show: showTrails }
}));
}
}
删除功能如下:
function removeTracksAndTrails(oldTracks) {
//remove any outdated tracks and trails
for (var i = 0; i < oldTracks.length; i++) {
var trackToRemove = map.entities.getById(oldTracks[i]);
//trackToRemove.polyline = undefined;
map.entities.remove(trackToRemove);
}
}
我还在另一个post中读到了一个建议,然而,这看起来是一个复杂的解决方案,需要整合时间。建议这种方法与简单的折线相似吗?
谢谢!
更新:看起来只有在“trailMaterial”是PolylineOutlineMaterialProperty时才会出现这种情况,即当材料是Cesium.Color对象时,问题不再发生。