4

この質問は以前に尋ねられたようですが、適切な例を見つけることができませんでした。PHP には精通していますが、Javascript は初めてで、CZML をストリーミングする方法がわかりません。

マップ上に約 6,500 のアセットを表示したいと考えています。すべてがロードされた後に Web ページが表示されないようにする (およびユーザーの忍耐力をテストする) ために、バックグラウンドでアセットを表示してロードする必要があります。

誰かがこれを行う方法の例を教えてもらえますか? 次のように czml ファイルを読み込むことができます。

var czmlDataSource = new Cesium.CzmlDataSource(); 
viewer.dataSources.add(czmlDataSource); 
czmlDataSource.loadUrl('some_file.czml'); 

しかし、それは私が得た限りです:-(私は.processUrlをどこかに置く必要があることを知っており、CZMLファイルで異なるパケットを使用する必要があることを理解したので、私のCZMLファイルは次のようになります:

[ 
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 ファイルを提供できれば素晴らしいことです。ありがとうございました!

4

2 に答える 2

5

ストリーミング CZML ネットワーク ソースがある場合、クライアント JavaScript コードは load() ではなく process() を呼び出して、ソースのストリーミングを設定する必要があります。

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 応答の content-type を に設定する必要があることに注意してくださいtext/event-stream

クライアントからストリームをキャンセルするには、次のように呼び出します。

czmlEventSource.close();

サーバーからのストリームをキャンセルするには、「text/event-stream」以外の Content-Type で応答するか、200 OK 以外の HTTP ステータス (404 Not Found など) を返します。

静的 CZML ファイルからロードする場合は、URL または相対ファイル参照を使用して load() を呼び出します。

var dataSource = Cesium.CzmlDataSource.load('some_file.czml');
viewer.dataSources.add(dataSource);
于 2016-10-05T17:26:05.337 に答える