关于编辑器:cesiumCZML路径动态改变

举荐:将 NSDT场景编辑器 退出你的3D开发工具链https://ted.sinoccdc.cn/?sourceId=9

这篇文章和上一篇cesium编程中级(六)寰球视频纹理一样,也是跟群友一起探讨时想出的解决方案^^起因是群友心愿实现一个性能,在加载czml数据之后,有物体沿着czml中的门路静止,而后静止过程中,会每个几秒钟在门路最初增加一个点,心愿能看到门路动静扭转而且物体的挪动连贯这里其实重要的点有两个1. 门路前面每隔一段时间增加一个点2. 物体连贯静止(这一点是在实现之后,回过头来反思间接写进去的)群友本人写了一份代码,咱们先来粗略看一下代码组成var viewer = new Cesium.Viewer(‘cesiumContainer’);

var czml = [{

        "id": "document",
        "name": "polygon",
        "version": "1.0"
    }, {
        "id": "shape2",
        "name": "Red box with black outline",
        "availability": "2012-08-04T16:00:00Z/2012-08-04T18:00:00Z",
        "box": {
            "dimensions": {
                "cartesian": [30.0, 30.0]
            },
            "material": {
                "stripe": {
                    "orientation": "VERTICAL",
                    "evenColor": {
                        "rgba": [10, 211, 250, 0]
                    },
                    "oddColor": {
                        "rgba": [10, 211, 250, 255]
                    },
                    "offset": {
                        "number": 1
                    },
                    "repeat": 0.5
                }
            },
        },
        "path": {
            "material": {
                "solidColor": {
                    "color": {
                        "interval": "2012-08-04T16:00:00Z/2012-08-04T18:00:00Z",
                        "rgba": [255, 255, 255, 128]
                    }
                }
            },
            "width": [{
                "interval": "2012-08-04T16:00:00Z/2012-08-04T18:00:00Z",
                "number": 3.0
            }],
            "show": [{
                "interval": "2012-08-04T16:00:00Z/2012-08-04T18:00:00Z",
                "boolean": true
            }]
        },
        "position": {
            "interpolationAlgorithm": "LAGRANGE",
            "interpolationDegree": 1,
            "epoch": "2012-08-04T16:00:00Z",
            "cartographicDegrees": [
                0.0, 118.87841653400005, 30.95679870500004, 0.0,
                10.0, 118.87826541800007, 30.95680770900003, 0.0,
                20.0, 118.8774481050001, 30.956860625000047, 0.0,
                30.0, 118.87660414600009, 30.956910105000077, 0.0,
                ...省略
            ]
        }
    }];

var dataSourcePromise;
var i = 30;
var a = 410;
setInterval(function() {
    i += 0.001;
    a += 10;
    czml[1].position.cartographicDegrees.push(a, 118.813667, i, 0);
}, 10000);

dataSourcePromise = Cesium.CzmlDataSource.load(czml);
viewer.dataSources.add(dataSourcePromise);
viewer.zoomTo(dataSourcePromise);

步骤简略归纳如下:1. 创立三维球2. 创立czml文件3. 动静增加点到czml的门路中4. 增加czml到三维球上咱们要解决第一点,比拟惯例,动静增加点首先想到的是setInterval,每隔10秒钟增加一个点,这里没有问题,然而问题是,增加了点之后,界面上并没有体现进去,调试代码之后发现czml 门路中的点数的确是减少了,所以,可能性比拟大的是数据没刷新,于是在增加点后尝试增加…
setInterval(function() {

...
//门路最初增加节点
czml[1].position.cartographicDegrees.push(a, 118.8747338, i, 0);
//清空之前数据,否则数据越来越多
viewer.entities.removeAll();
//从新增加批改后的数据
viewer.dataSources.add(Cesium.CzmlDataSource.load(czml));

}, 1000);
到这里第一个问题解决了,门路变动了,然而随之第二个问题也显现出来,每次增加完数据之后,方块都回到了原点。看第二个问题之前,咱们先来看看官网的一些示例czml path (留神这里是本地部署门路)发现它有一个clock属性var czml = [{

"id" : "document",
"name" : "CZML Path",
"version" : "1.0",
"clock": {
    "interval": "2012-08-04T10:00:00Z/2012-08-04T15:00:00Z",
    "currentTime": "2012-08-04T10:00:00Z",
    "multiplier": 10
}

}, {

"id" : "path",
.....

}];
以后工夫咱们能够通过viewer.clock.currentTime 来获取,如同有搞头,来试试…
//门路最初增加节点
czml[1].position.cartographicDegrees.push(a, 118.8747338, i, 0);
//批改以后工夫
czml[0].clock.currentTime = viewer.clock.currentTime.toString();

尝试了一下,果然可行。

成果如下:

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理