首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >of : CZML的流媒体示例

of : CZML的流媒体示例
EN

Stack Overflow用户
提问于 2015-02-24 06:48:34
回答 2查看 7.4K关注 0票数 4

这个问题似乎以前有人问过,但我找不到合适的例子。我熟悉PHP,但对Javascript不熟悉,不知道如何流式传输CZML。

我想在地图上显示大约6.500个资产。为了防止网页在所有内容加载后显示(并测试用户的耐心),我希望它显示,然后在后台加载资源。

谁能给我举个例子来说明如何做到这一点?我可以像这样加载czml文件:

代码语言:javascript
复制
var czmlDataSource = new Cesium.CzmlDataSource(); 
viewer.dataSources.add(czmlDataSource); 
czmlDataSource.loadUrl('some_file.czml'); 

但这就是我得到的:-(我知道我应该在某个地方使用.processUrl,我知道我应该在CZML文件中使用不同的包,所以我的CZML文件看起来像这样:

代码语言:javascript
复制
[ 
event: czml 
data: { 
    "id":"document", 
    "version":"1.0" 
  } 

event: czml 
data: { 
    "id":"1", 
    "billboard":{ 
      "image":"label.png", 
      "verticalOrigin":"BOTTOM", 
      "show":true 
    }, 
    "position":{ 
      "cartographicDegrees":[ 
        20.0, 50.0, 0 
      ] 
    } 
  } 

event: czml 
data: { 
    "id":"2", 
    "billboard":{ 
      "image":"label.png", 
      "verticalOrigin":"BOTTOM", 
      "show":true 
    }, 
    "position":{ 
      "cartographicDegrees":[ 
        10.0, 52.0, 0 
      ] 
    } 
  } 
] 

如果有人能提供一个工作样本,比如一个.czml文件和一个.js文件,那就太好了。谢谢!

EN

回答 2

Stack Overflow用户

发布于 2016-10-06 01:26:05

如果有一个流式CZML网络源,那么客户端JavaScript代码必须调用process()而不是load()来设置流式信息源。

代码语言:javascript
复制
var czmlStream = new Cesium.CzmlDataSource();
var czmlEventSource = new EventSource('some_url_to_czml');
czmlEventSource.addEventListener('czml', function(czmlUpdate) {
      try {
         var json = JSON.parse(czmlUpdate.data);
         console.log('czml event id=', json.id);
         //process the 'data:' coming across as JSON into the datasource 
         czmlStream.process(json);
      } catch (t) {
         console.error(t)
      }       
    }, false);
    
//put the streaming datasource into Cesium 
viewer.dataSources.add(czmlStream);

注意:要使上述代码正常工作,流来源必须将HTTP response中的content-type设置为text/event-stream

要取消来自客户端的流,只需调用:

代码语言:javascript
复制
czmlEventSource.close();

若要取消来自服务器的流,请使用非"text/event- stream“Content-Type进行响应,或返回200 OK以外的HTTP状态(例如,404 Not Found)。

如果从静态CZML文件加载,则使用URL或相对文件引用调用load()。

代码语言:javascript
复制
var dataSource = Cesium.CzmlDataSource.load('some_file.czml');
viewer.dataSources.add(dataSource);
票数 5
EN

Stack Overflow用户

发布于 2018-11-06 05:34:43

未回答的问题的一部分是关于czml文件的格式。问题中发布的示例有一些错误/误解。对于每个data字段,您的JSON数据必须都在一行上,或者您可以像我一样为每行添加一个data字段。你还必须在每个包之后有两个返回字符,否则流将不知道在哪里结束,这也是在文件末尾的最后一个包!我最近也为此而苦苦挣扎,您在as站点上找不到任何东西的原因是因为从技术上讲,这是Event Stream格式定义的一部分,而不是czml。您可以在here格式上找到更多信息。下面是正确格式化czml的正确示例(注意:代码片段删除了最终数据包后的最后两个返回字符,不要忘记它们!):

代码语言:javascript
复制
event: czml
data: {
data:    "id":"document",
data:    "version":"1.0"
data:  }


event: czml
data: {"id":"1",
data:        "billboard":{
data:          "image":"label.png",
data:          "verticalOrigin":"BOTTOM",
data:          "show":true
data:        },
data:        "position":{
data:          "cartographicDegrees":[
data:            20.0, 50.0, 0
data:          ]
data:        }
data:      }


event: czml
data: {"id":"me",
data:        "billboard":{
data:          "image":"label.png",
data:          "verticalOrigin":"BOTTOM",
data:          "show":true
data:        },
data:        "position":{
data:          "cartographicDegrees":[
data:            10.0, 50.0, 0
data:          ]
data:        }
data:      }

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28685068

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档