Cesium 车辆跟踪事件气泡弹窗追随

展示图:

功能思路:

部分代码:

创建path路线图

//路线参数 处理
var positionData = paramObj.data.Coordinates;
        Intervals = 0; //间隔时间
        for (var i = 0; i < positionData.length; i++) {
            var time = Cesium.JulianDate.addSeconds(starttime, Intervals, new Cesium.JulianDate());
            var data = positionData[i];
            var position = Cesium.Cartesian3.fromDegrees(data.x, data.y, 20);
            property.addSample(time, position);
            Intervals += paramObj.setTime.multiplier;
        }
        var stoptime = Cesium.JulianDate.addSeconds(starttime, Intervals, new Cesium.JulianDate()); //总停止秒数         
        //时钟 设置
        viewer.clock.startTime = starttime.clone();
        viewer.clock.stopTime = stoptime.clone();
        viewer.clock.currentTime = starttime.clone();
        viewer.clock.clockRange = Cesium.ClockRange.CLAMPED; //Loop at the end
        viewer.clock.multiplier = paramObj.setTime.multiplier;

        entity = viewer.entities.add({
            availability: new Cesium.TimeIntervalCollection([new Cesium.TimeInterval({
                start: starttime,
                stop: stoptime
            })]),
            position: property,
            orientation: new Cesium.VelocityOrientationProperty(property),
            billboard: {
                image: paramObj.imgurl,
            },
            path: {
                resolution: paramObj.resolution,
                material: new Cesium.PolylineGlowMaterialProperty({ //线的材质
                    glowPower: 0.5,
                    color: Cesium.Color.YELLOW
                }),
                width: 5,
                leadTime: 0,
                trailTime: Intervals,
            }
        });

时钟帧数监听函数

//时间实时函数
    function Stoptime(){
        var position = entity.position.getValue(viewer.clock.currentTime);
         var paramObj = {
                id: trackPopUpContent,
                HTMLdiv: <div class="leaflet-popup-content-wrapper" style="background:#FFF;"> +
                    <div id="trackPopUpLink" class="leaflet-popup-content" style="max-width:300px;max-height:500px"><h5>纬度:10,<br>经度:20</h5></div> +
                    </div>,
                Offset: {
                    x: 0,
                    y: 0
                },
                coordinate: position, //笛卡尔坐标参数
                lineStyle: {
                    Linewidth: 3,
                    Lineheight: 25,
                    Linebackground: #409EFF
                },
                CircleStyle: {
                    Circleradius: 8,
                    Circlecolor: #409EFF
                },
                heighthidenum:10000,//高度隐藏值
            } 
            //固定弹窗 位置
        PopupCoordinatePositioning(paramObj);
        //当执行了时间停止监听的函数后,务必移除监听事件,因为时间一直在停止状态,函数将被一直执行
        //viewer.clock.onStop.removeEventListener(Stoptime);
    }

路线停止后的开启函数

//开启
    function start(){
        var stoptime = Cesium.JulianDate.addSeconds(starttime, Intervals, new Cesium.JulianDate());
        viewer.clock.stopTime=stoptime.clone();
        var popupchildrens=document.getElementById("bubbleContent").children;
        for(var i=0;i<popupchildrens.length;i++){
            var childrenid=popupchildrens[i].id;
            //popupchildrens[i].style.display="none";
            $("#" + childrenid).remove(); //移除
        }
    }

提醒 示例代码不是很完善 person.png

经验分享 程序员 微信小程序 职场和发展