2014-01-15 33 views
11

我目前正在考慮使用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

回答

8

我知道這個問題是幾個星期大,但你有沒有解決這個問題?從上面的例子中,我注意到的第一件事是您調用czmlStream.load而不是czmlStream.process。 load清除了現有數據,而process沒有。對於流式傳輸,調用加載只會導致最後一個數據包出現。