cesium-czml文件理解--一(文档属性)

本文绝大多数内容来自于

https://www.cnblogs.com/mazhenyu/p/8315840.html

在学习原文博客的基础上,记录自己的学习心得--学习完成之后,发现文中没有对许多常见的属性做出解释

例如lable,description,billboard属性等,是否还有其他属性也不尽可知;

初期学习cesium时对czml文件进行过简单的解读,现重新记录一下对czml文件的理解;

czml即为json,但json不一定为czml;如同geojson与json的关系。

czml文件通常为一个对象数组,每个id唯一代表一个对象;

常见属性:

1 id:唯一代表对象的值,可人为指定,也可不指定,由cesium默认指定,但程序无法再通过id去控制该对象;

值得注意的是,id不仅要在同一个czml中唯一,且再同时载入其他czml文件时也得唯一,简单一点记为全局唯一。实际上操作的时候不会全局唯一,具体原因见第6点属性。

2 name:对象的名称;

3 someProperty:时间间隔的定义使用intervals属性,这个属性是可选的--添加  可变属性,

适用于string,number,boolean属性(简单的数组类型)

{
"id":"myObject",
"someProperty":[
{
"interval":"2012-04-30T12:00:00Z/13:00:00Z",
"number":5
},
{
"interval":"2012-04-30T13:00:00Z/14:00:00Z",
"number":6
}
]
}

如果属性值一直不变,则可使用简单的方式来表示

{
"id":"myObject",
"someProperty":{
"interval":"2012-04-30T12:00:00Z/14:00:00Z",
"number":5
}
}
{
"id":"myObject",
"someProperty":5
}

4 复合属性值--笛卡尔坐标位置或颜色,使用数组来表示

{
"id":"myObject",
"someComplexProperty":{
"cartesian":[1.0,2.0,3.0]
}
}

时间不可以省略,否则系统不知道是在数组中采样还是将这个数组取为同一个值;

5 Sampled Property Values 属性值采样 离散时间定义不同的值,客户端根据时间差计算属性值

根据此属性,就可以生成消防演习,等动画了,这也是模型的运动不会跳跃的原因。

{
// ...  
"someInterpolatableProperty":{
"cartesian":[
"2012-04-30T12:00Z",1.0,2.0,3.0,
"2012-04-30T12:01Z",4.0,5.0,6.0,
"2012-04-30T12:02Z",7.0,8.0,9.0
]
}
}

采用以上方式需要给每个属性都指定时间,这样工作量具体;因此出现批量采样的声明方式

{
// ...  
"someInterpolatableProperty":{
"epoch":"2012-04-30T12:00Z",
"cartesian":[
0.0,1.0,2.0,3.0,
60.0,4.0,5.0,6.0,
120.0,7.0,8.0,9.0
]
}
}

即使用epoch的描述来表示时间采用距离起点时间的秒数来确定

即0秒,60秒,120米,cartesin中的第一个数字表示距离起始的秒数;

这也解释了为何消防演示案例中czml没有指定结束时间,动画却能终止的原因

最后还可以采用一些附加属性来控制采样的方式

{
// ...  
"someInterpolatableProperty":{
"epoch":"2012-04-30T12:00Z",
"cartesian":[
0.0,1.0,2.0,3.0,
60.0,4.0,5.0,6.0,
120.0,7.0,8.0,9.0
],
"interpolationAlgorithm":"LAGRANGE",
"interpolationDegree":5
},
}

名称

Scope 范围

JSON类型

说明

epoch

Packet

string

使用ISO8601规范来表示日期和时间

nextTime

Packet

string or number

在时间间隔内下一个采样的时间,可以通过ISO8061方式,也可以通过与epoch秒数来定义。它决定了不同packet之间的采样是否有停顿。

previousTime

Packet

String or number

在时间间隔内前一个采样的时间,可以通过ISO8061方式,也可以通过与epoch秒数来定义,它决定了不同packet之间的采样是否有停顿。

InterpolationAlgorithm

Interval

String

用于插值的算法,有LAGTANGE,HERMITE和GEODESIC。默认是LAGRANGE。如果位置不在该采样区间,那么这个属性值会被忽略。

interpolationDegree

Interval

Number

定义了用来插值所使用的多项式的次数,1表示线性差值,2表示二次插值法,默认为1。如果使用GEODESIC插值算法,那么这个属性将被忽略。 

6 EventSource and Streaming  每个id对象作为单独的事件传输到客户端,这样就解决了大json文件读取慢的问题

CZML使用浏览器的server-sent events(EventSource)API来处理流数据---实现增量处理

例如一个CZML文件或流可以包含多个packet,每个packet都有相同的id,分别描述同一个对象的不同方面的属性。 (此点与前文描述矛盾)

CZML提供了previousTime和nextTime子属性,用来处理同一个对象不同时间渲染的问题

    // ... 

    "someInterpolatableProperty": { 

        "epoch": "2012-04-30T12:00:00Z", 

        "cartesian": [ 

            0.0, 1.0, 2.0, 3.0, 

            1.0, 4.0, 5.0, 6.0, 

            2.0, 7.0, 8.0, 9.0,

            3.0, 10.0, 11.0, 12.0

        ], 

        "previousTime": -1.0, 

        "nextTime": 4.0 

    } 

}
它的作用是告诉客户端3.0后下一个时间是4.0,就像我们上面举的那个例子,3的后面是8,根据nextTime我们就知道3和8之间肯定还有一段数据没有接收到,所以在开始插值之前我们就需要先等待数据读取完成。

没有必要同时设置previousTime和nextTime,在不同的情况下选择使用其中最方便的一个就可以了。只要定义其中的一个,在进行插值前Cesium就会首先对数据进行完整性检查。

7 Availability属性:表示对象的数据在什么时候是可用的;假如一个对象在当前的动画时间内是可用,但是客户端现在还没有获取到相应的数据(可能在下一packet里面,但现在还没有获取到),那么Cesium就会先暂停,直到获取到数据为止。这个属性的值可以一个字符串表示的一个时间段,也可以是一个字符串数组表示的多个时间段。

 

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值