CZML
CZML是cesium中很重要的一個概念,也是一個亮點,CZML使得cesium很酷很炫地展示動態數據成爲可能。
CZML是一種JSON格式的字符串,用於描述與時間有關的動畫場景,CZML包含點、線、地標、模型、和其他的一些圖形元素,並指明瞭這些元素如何隨時間而變化。某種程度上說, Cesium 和 CZML的關係就像 Google Earth 和 KML。
CZML 的一個典型結構如下
[
// packet one
{
"id": "GroundControlStation"
"position": { "cartographicDegrees": [-75.5, 40.0, 0.0] },
"point": {
"color": { "rgba": [0, 0, 255, 255] },
}
},
// packet two
{
"id": "PredatorUAV",
// ...
}
]
如上CZML片段描述了兩個包(packet,這裏每個包描述了一個點),每個包的id,position和color。
每個包都有一個 id
屬性用來唯一標識這個對象。id不一定要求用GUIDs,但是最好在載入場景中CZML中能夠唯一單個的對象。如果id沒有指定, cesium會自動生成一個,但是,這樣在後續處理中會遇到麻煩,比如後面的操作中需要引用這個對象並給它添加更多的數據。除了id屬性
,
一個包還會有更多的屬性用於描述這個對象的特性. 在上面這個例子中, 我們指定了一個id爲"GroundControlStation" 的對象,這個對象擁有一個固定的WGS84座標 (-75.5 ,40.0,0.0), 並在這個位置顯示一個藍色的點。更多的屬性參考https://github.com/AnalyticalGraphicsInc/cesium/wiki/CZML-Content。
CZML比較特殊的是跟時間序列相關的屬性
{
// ...
"someInterpolatableProperty": {
"cartesian": [
"2012-04-30T12:00Z", 1.0, 2.0, 3.0, //表示當時間爲2012-04-30T12:00Z,座標爲(1,2,3)
"2012-04-30T12:01Z", 4.0, 5.0, 6.0, //表示當時間爲2012-04-30T12:01Z,座標爲(4,5,6)
"2012-04-30T12:02Z", 7.0, 8.0, 9.0 //表示當時間爲2012-04-30T12:02Z,座標爲(7,8,9)
]
}
}
{
// ...
"someInterpolatableProperty": {
"epoch": "2012-04-30T12:00Z", //表示時間起點爲2012-04-30T12:00:00
"cartesian": [
0.0, 1.0, 2.0, 3.0, //從起點開始,第0秒時座標爲(1,2,3)
60.0, 4.0, 5.0, 6.0, //從起點開始,第60秒時座標爲(4,5,6)
120.0, 7.0, 8.0, 9.0 //從起點開始,第120秒時座標爲(7,8,9)
]
}
}
{
// ...
"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", //插值算法爲LAGRANGE,還有HERMITE,GEODESIC
"interpolationDegree": 5 //1爲線性插值,2爲平方插值
}, }
定義了一個CZML後,就可以把它載入到場景中,就能獲得該對象的動態效果
dataSource = new Cesium.CzmlDataSource();
dataSource.load(czml);
viewer.dataSources.add(dataSource);
比如我們載入官方的czml例子中的Vehicle.czml,就能看到一輛小車緩緩移動,這時候動畫控制器就很有用,可以快進、暫停、倒放、回放等等
CZML的草案已經提交到OGC,有望成爲與KML競爭的國際標準。
本篇到此結束。下一篇《cesiumjs開發實踐(七) 3D模型》