Cesium之车辆轨迹动态可视化

常见轨迹数据有车辆和飞机轨迹,车辆一般只考虑二维信息,飞机则要加入高程信息。本篇博客先以车辆轨迹为例。(本博客参考法克鸡丝博客https://www.cnblogs.com/fuckgiser/p/5706842.html,这里表示特别感谢!)

Cesium之车辆轨迹动态可视化_第1张图片

我拿到的车辆轨迹如图所示,其中3、4列分别表示XY坐标,是WGS84-UTM投影坐标,需要转为WGS84坐标,方法我在另一篇博客介绍了,这里不再赘述。第一列是车辆编号,第二列是该车辆下的轨迹段。

整体思路是这样以每辆车辆的每段轨迹段为单位,将每段数据每个点加到Entity,用billboard表示,然后设置每个点的显示,形成流动效果。要注意的NameID每段轨迹都应该从0开始,否则所有轨迹不会同时流动。核心代码如下:

var animationObj = {
     stepsRange: {
                   start: 0,
                   end: 100
                   },
     trails: 20,
     duration: 75
};

var _range = animationObj.stepsRange.end - animationObj.stepsRange.start;
var entity = viewer.entities.add({
                    position : Cesium.Cartesian3.fromDegrees(x,y,h),
                    nameID:nameid,
                    billboard :{
                        image : 'c2.png',
                        width:7,
                        height:7,
                        color : color
                    }
                });
entity.isAvailable = function(obj){
                    return function(currentTime){
                        if (!Cesium.defined(currentTime)) {
                            throw new Cesium.DeveloperError('time is required.');
                        }
                        var nMS = Cesium.JulianDate.toDate(currentTime).getTime()/animationObj.duration;
                        var time = (nMS%_range + animationObj.stepsRange.start);

                        var trails = trails || 10;
                        if (time && obj.nameID > time - trails && obj.nameID < time) {
                            obj.billboard.color._value.alpha = 0.8*(obj.nameID - time + trails)/trails;
                            return true;
                        } else {
                            return false;
                        }
                    }
                }(entity);

 

你可能感兴趣的:(Cesium)