Cesium軌跡回放

在使用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");
        });
    }
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容