在使用openlayers做二維地圖的時候也開發(fā)過軌跡回話,其基本思路就是使用一個定時器,實時更新車輛的位置的方向,讓車輛在軌跡上跑,做法也比較簡單,在Cesium中,使用CZML實現(xiàn)起來更容易。CZML是一種用來描述動態(tài)場景的JSON架構(gòu)的語言,主要用于Cesium在瀏覽器中的展示。它可以用來描述點、線、廣告牌、模型以及其他的圖元,同時定義他們是怎樣隨時間變化的。軌跡回放功能主要是用于表達(dá)坐標(biāo)隨著時間來變化的。平臺還在努力開發(fā)中,可以先預(yù)覽下效果。cgis
1.模板
首先創(chuàng)建一個軌跡回放的czml模板,后續(xù)只需要往模板中添加坐標(biāo)和時間就可以創(chuàng)建一個用于回話軌跡的czml文件。
let czml = [{
"id": "document",
"name": "TrackPlayback",
"version": "1.0"
}, {
"id":"Vehicle",
"availability":"2021-06-04T16:00:00Z/2021-06-04T17:04:54.9962195740191Z",
"model":{
"gltf":"../cesium/Widgets/models/CesiumMilkTruck/CesiumMilkTruck.glb",
"minimumPixelSize":100,
"maximumScale":50
},
"orientation" : {
"velocityReference": "#position"
},
"properties" : {
"fuel_remaining" : {
"epoch":"2021-06-04T16:00:00Z",
"number": [
0, 22.5,
1500, 21.2
]
}
},
path: {
material: {
polylineOutline: {
color: {
rgba: [255, 0, 255, 255],
},
outlineColor: {
rgba: [0, 255, 255, 255],
},
outlineWidth: 5,
},
},
width: 8,
leadTime: 0,
},
"position": {
"interpolationAlgorithm": "LAGRANGE",
"interpolationDegree": 1,
"epoch": "2021-06-04T16:00:00Z",
"cartesian": []
}
}];
export default czml
//使用經(jīng)緯度是將cartesian換成cartographicDegrees
2.添加坐標(biāo)
模塊創(chuàng)建好后,需要往czml中的position添加坐標(biāo),如下所示:
czml[1].position.cartesian.push(index, position.x,position.y,position.z);
3.加載czml文件
添加完坐標(biāo)后,就創(chuàng)建了一個完整的czml文件,將其加載到viewer中就可以實現(xiàn)軌跡的回放了。
addZcmlSource(data){
cgis3d.viewer.clock.canAnimate = true;//時間軸暫停
cgis3d.viewer.clock.shouldAnimate = true;//時間軸暫停
console.log(czml);
let dataSourcePromise = Cesium.CzmlDataSource.load(data);
cgis3d.viewer.zoomTo(dataSourcePromise);
this.dataSource = dataSourcePromise;
cgis3d.viewer.dataSources.add(dataSourcePromise).then(function (ds) {
if(cgis3d.viewer.trackedEntity){
cgis3d.viewer.entities.remove(cgis3d.viewer.trackedEntity);
cgis3d.viewer.trackedEntity = null;
}
cgis3d.viewer.trackedEntity = ds.entities.getById("Vehicle");
});
}