我目前正在考慮使用Cesium作爲一種可視化個人項目數據的方式,實時更新將是一件很棒的事情。使用HTML5將CZML流式傳輸爲銫EventSource
閱讀維基,我發現this section概述瞭如何使用HTML EventSource API實現在Cesium中動態更新對象的方式。
我在Node.js中編寫了一個相當簡單的服務器,它創建了一個定期發送對象位置更新的text/event-stream
。這部分工作正常,我可以成功連接並記錄這些數據到控制檯。
我的問題在於銫。我花了好幾個小時仔細閱讀文檔(包括下載的Github wiki和JSDoc文檔),但我無法弄清楚如何讓我的CZML被添加到全球。使用隨源代碼提供的Cesium Viewer應用程序,我可以看到如何從本地和遠程資源加載CZML文件,但我無法弄清楚如何修改此方法來從EventSource事件中獲取CZML數據包。
我CZML包的樣品:
{
'id': 'myObject',
'availability': '2014-01-15T00:00Z/2014-01-01T24:00Z',
'point': {
'color': {
'rgba': [255, 255, 0, 255]
},
'outlineWidth': 2.0,
'pixelSize': 3.0,
'show': true
},
'position': {
'cartesian': [0.0, -2957000.0, -840000.0, 5581000.0],
'epoch': '2014-01-01T00:00Z',
'interpolationAlgorithm': 'LINEAR',
'interpolationDegree': 1
}
}
我目前的做法如下:
var czmlStream;
var czmlStreamUrl = 'http://127.0.0.1:8080/czml-stream';
viewer.dataSources.add(czmlStream);
var czmlEventSource = new EventSource(czmlStreamUrl);
czmlEventSource.addEventListener('czml', function(czmlUpdate) {
czmlStream.load(JSON.parse(czmlUpdate.data));
}, false);
不幸的是,這是行不通的。我根據它的靜態CZML文件如何被加載:
var source;
var sourceURL = 'http://127.0.0.1/czml-static.czml';
source.loadUrl(sourceURL).then(function() {
viewer.dataSources.add(source);
}
有誰知道我錯了,或者更好的是,這樣做的正確方法嗎?如果有區別,我使用銫b24。如果您需要更多的信息來幫助我,請提問,我會更新問題。
我試過谷歌搜索解決方案和示例代碼,但我找不到任何東西,除了描述如何使用EventSource的wiki page。