Ceisum实时获取后台数据 实时更新实体位置信息

用定时器模拟实时获取后台数据 当取到数据后实体同时移动到目标位置 这种方式不再与Cesium时间关联 

实现效果:每秒新增一个坐标;每秒实体运动到相应正确位置

var viewer = new Cesium.Viewer('cesiumContainer', {
    infoBox : false,
    selectionIndicator : false,
    shadows : true,
    shouldAnimate : true
});
var positions = [];
var poly = undefined;
var entityArr=[];
var PolyLinePrimitive = (function(){
    function _(positions){
        this.options = {
            polyline : {
                show : true,
                positions : [],
                material : Cesium.Color.CORNFLOWERBLUE,
                width : 5,
                arcType : Cesium.ArcType.RHUMB,
            }
        };
        this.positions = positions;
        this._init();
    }
    _.prototype._init = function(){
        var _self = this;
        var _update = function(){
            return _self.positions;
        };
        //实时更新polyline.positions
        this.options.polyline.positions = new Cesium.CallbackProperty(_update,false);
        viewer.entities.add(this.options);
        entityArr.push(this.options)
    };
    return _;
})();

var czml2 = [{
    "id": "document",
    "name":"CZML Path",
    "version": "1.0",
}, {
    "id": "path1",
    "name": "path with GPS flight data",
    "description": "<p>Hang gliding flight log data from Daniel H. Friedman.<br>Icon created by Larisa Skosyrska from the Noun Project</p>",
    "availability": "2012-08-04T10:00:00Z/2012-08-04T15:00:00Z",
        "billboard":{
        "image":"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAyMy4wLjMsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0i5Zyw56m65a+85by5XzFfIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiDQoJIHk9IjBweCIgdmlld0JveD0iMCAwIDMyIDMyIiBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCAzMiAzMjsiIHhtbDpzcGFjZT0icHJlc2VydmUiPg0KPHN0eWxlIHR5cGU9InRleHQvY3NzIj4NCgkuc3Qwe3N0cm9rZTojMDAwMEZGO3N0cm9rZS1taXRlcmxpbWl0OjEwO30NCgkuc3Qxe2ZpbGw6bm9uZTtzdHJva2U6IzAwMDBGRjtzdHJva2UtbWl0ZXJsaW1pdDoxMDt9DQo8L3N0eWxlPg0KPHBvbHlnb24gY2xhc3M9InN0MCIgcG9pbnRzPSIxNS41LDUuMDQgMTIuNSwxMC4yMyAxOC41LDEwLjIzICIvPg0KPGxpbmUgY2xhc3M9InN0MSIgeDE9IjE1LjUiIHkxPSIxMC41IiB4Mj0iMTUuNSIgeTI9IjI2LjUiLz4NCjxsaW5lIGNsYXNzPSJzdDEiIHgxPSIxMi41IiB5MT0iMjYuNSIgeDI9IjE4LjUiIHkyPSIyNi41Ii8+DQo8bGluZSBjbGFzcz0ic3QxIiB4MT0iMTUuNSIgeTE9IjIwLjUiIHgyPSIxMi41IiB5Mj0iMjMuNSIvPg0KPGxpbmUgY2xhc3M9InN0MSIgeDE9IjE4LjUiIHkxPSIyMy41IiB4Mj0iMTUuNSIgeTI9IjIwLjUiLz4NCjwvc3ZnPg0K",
        "scale":0.2
    },
    "position": {
        "cartographicDegrees": [ 118.87826541800007, 30.956799, 0.0,]
    }
}]; 
var c2 = new Cesium.CzmlDataSource();
viewer.dataSources.add(c2.load(czml2));

// 动态赋值
var i = 30.956799;
var a = 20;
var b=118.87826541800007;
var realTimeClData=setInterval(function() {
    i+= 10.001*Math.random();
    b+=10.001*Math.random();
    a+= 10;
    //图标:更新czml坐标
    czml2[1].position.cartographicDegrees = [b,i,0];
    c2.process(czml2);
    //线:更新entities坐标
    var cartesian =Cesium.Cartesian3.fromDegrees( b, i, 0);
    if(positions.length == 0) {
        positions.push(cartesian.clone());
        positions.push(cartesian);
    }
    if(positions.length >= 2){
        if (!Cesium.defined(poly)) {
            poly = new PolyLinePrimitive(positions);
        }else{
            //positions.pop();
            //cartesian.y += (1 + Math.random());
            positions.push(cartesian);
            //只展示5条坐标数据
            //if(positions.length>5){
            //    positions.shift();
            //}
            console.log(positions.length,"positions");
        }
    }
}, 1000);
Sandcastle.addToolbarButton('清除计时器', function() {
   clearInterval(realTimeClData);
});

二维展示

三维展示

 多个实体运动:实时加载数据 更新位置信息

var viewer = new Cesium.Viewer('cesiumContainer', {
    infoBox : false,
    selectionIndicator : false,
    shadows : true,
    shouldAnimate : true
});
var PolyLinePrimitive = (function(){
    function _(positions){
        this.options = {
            polyline : {
                show : true,
                positions : [],
                material : Cesium.Color.CORNFLOWERBLUE,
                width : 1,
                arcType : Cesium.ArcType.RHUMB,
            }
        };
        this.positions = positions;
        this._init();
    } 
    _.prototype._init = function(){
        var _self = this;
        var _update = function(){
			// 1秒将近100次的调用定义的positions数组,实时加载更新线的坐标位置!!!
            return _self.positions;
        };
        //实时更新polyline.positions
        this.options.polyline.positions = new Cesium.CallbackProperty(_update,false);
        viewer.entities.add(this.options);
    };
    return _;
})();
// 记录线的坐标,PolyLinePrimitive实体类监听的坐标
var positions = [];
// 记录线的所有实体对象
var poly = [];//undefined
// 测试实体条数
var ec =5;
// 添加初始化数据(positions、poly)
for (var i = 0; i < ec; i++){
    positions.push([]);
    poly.push(undefined);
}
var czml2 = [{
    "id": "document",
    "name":"CZML Path",
    "version": "1.0",
}, {
    "id": "path1",
    "name": "path with GPS flight data",
    "availability": "2012-08-04T10:00:00Z/2012-08-04T15:00:00Z",
        "billboard":{
        "image":"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAyMy4wLjMsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0i5Zyw56m65a+85by5XzFfIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiDQoJIHk9IjBweCIgdmlld0JveD0iMCAwIDMyIDMyIiBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCAzMiAzMjsiIHhtbDpzcGFjZT0icHJlc2VydmUiPg0KPHN0eWxlIHR5cGU9InRleHQvY3NzIj4NCgkuc3Qwe3N0cm9rZTojMDAwMEZGO3N0cm9rZS1taXRlcmxpbWl0OjEwO30NCgkuc3Qxe2ZpbGw6bm9uZTtzdHJva2U6IzAwMDBGRjtzdHJva2UtbWl0ZXJsaW1pdDoxMDt9DQo8L3N0eWxlPg0KPHBvbHlnb24gY2xhc3M9InN0MCIgcG9pbnRzPSIxNS41LDUuMDQgMTIuNSwxMC4yMyAxOC41LDEwLjIzICIvPg0KPGxpbmUgY2xhc3M9InN0MSIgeDE9IjE1LjUiIHkxPSIxMC41IiB4Mj0iMTUuNSIgeTI9IjI2LjUiLz4NCjxsaW5lIGNsYXNzPSJzdDEiIHgxPSIxMi41IiB5MT0iMjYuNSIgeDI9IjE4LjUiIHkyPSIyNi41Ii8+DQo8bGluZSBjbGFzcz0ic3QxIiB4MT0iMTUuNSIgeTE9IjIwLjUiIHgyPSIxMi41IiB5Mj0iMjMuNSIvPg0KPGxpbmUgY2xhc3M9InN0MSIgeDE9IjE4LjUiIHkxPSIyMy41IiB4Mj0iMTUuNSIgeTI9IjIwLjUiLz4NCjwvc3ZnPg0K",
        "scale":0.2
    },
    "position": {
        "cartographicDegrees": [ 118.87826541800007, 30.956799, 0.0,]
    }
}]; 
// 动态赋值
var i = 30.956800;
var a = 20;
var b=118.8774481050001;
var czmlBox=[];
var dataSourceBox=[];
var ii = [];
var bb = [];
for (var i = 0 ; i < ec; i++){
    ii.push(i);
    bb.push(b);
    czmlBox.push(czml2);
    var DataSource = new Cesium.CzmlDataSource();
    viewer.dataSources.add(DataSource.load(czml2));
    dataSourceBox.push(DataSource);
}
var realTimeClData=setInterval(function() {
    for (var i = 0 ; i < ec; i++){
        ii[i] += 10.001*Math.random();
        bb[i] += 10.001*Math.random();
		//图标
		czmlBox[i][1].position.cartographicDegrees = [bb[i],ii[i],0];
		dataSourceBox[i].process(czmlBox[i]);
		//线
		var cartesian =Cesium.Cartesian3.fromDegrees( bb[i], ii[i], 0);
		if(positions[i].length == 0){
			positions[i].push(cartesian.clone());
			positions[i].push(cartesian);
		}
		if(positions[i].length >= 2){
			if (!Cesium.defined(poly[i])) {
				poly[i] = new PolyLinePrimitive(positions[i]);
			}else{
                if(positions[i].length>5){
                    positions[i].shift();
                }
				positions[i].push(cartesian);
			}
		}
    }
},2000);
Sandcastle.addToolbarButton('清除计时器', function() {
   clearInterval(realTimeClData);
});

二维展示 

 

三维展示 

 

cesium实时更新数据实现实体运功

 cesium在二维地图中移动实体

Cesium基于czml的model模型转向

Cesium基于czml billboard的模型转向

Ceisum实时获取后台数据 实时更新实体位置信息且实现实体转向功能

  • 9
    点赞
  • 52
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: CEISUM是一个基于JavaScript的开源库,用于在Web浏览器中展示三维地球场景的交互式地图。它结合了Cesium和自定义的JavaScript代码,提供了许多功能和工具,使用户能够创建和浏览具有丰富交互性和视觉效果的地球场景。 CEISUM的主要优点之一是它的跨平台性。它可以在不同的操作系统上运行,包括Windows,Mac和Linux。此外,它还支持所有主要的Web浏览器,如Chrome,Firefox,Safari和Edge。 使用CEISUM,用户可以在三维地球场景中添加各种图层和数据源,包括地图、卫星图像、矢量数据和其他地理信息。用户可以通过内置的工具和控件来导航和操纵地球场景,如缩放、旋转、倾斜和平移。 CEISUM还提供了一系列功能强大的API,允许用户通过自定义的JavaScript代码来扩展和定制地球场景。用户可以添加交互式图形、标记和弹出窗口等元素,以及自定义地球场景中的交互行为和效果。 总的来说,CEISUM是一个强大且灵活的JavaScript库,可以帮助开发者创建令人印象深刻的三维地球场景。无论是用于教育、科学研究、地理信息系统还是其他应用领域,CEISUM都是一个值得尝试的工具。 ### 回答2: "ceisum"是一个原生的JavaScript库,用于创建交互式地图和地理信息可视化。它提供了一组强大的功能,使开发者能够在网页上展示全球范围内的地理数据。 "ceisum"使用了WebGL技术,可以直接在浏览器上呈现出高性能的地图效果。它支持多种地图投影,例如平面投影和球面投影,可以根据需要选择最合适的投影方式来显示地图。 使用"ceisum",可以在地图上添加各种图层,包括地形图、卫星图像、建筑物模型等。开发者可以通过编写JavaScript代码来自定义这些图层的属性和样式,使其符合自己的需求。 "ceisum"还提供了丰富的交互功能,包括缩放、平移、旋转等操作,使用户可以轻松地浏览地图。开发者可以通过监听各种交互事件,以便根据用户的操作进行相应的处理。 此外,"ceisum"还支持数据可视化,开发者可以将地理数据以各种形式展现在地图上,如点、线、面等,以及为其添加颜色、大小等属性,从而更好地展示地理信息。 总而言之,"ceisum"是一个功能强大的原生JavaScript库,可以帮助开发者快速创建交互式地图和地理信息可视化。无论是展示地理数据还是实现用户交互,它都提供了丰富的功能和灵活的操作方式。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值