2015-02-23 2 views
2

Похоже, что этот вопрос задавали раньше, но я не смог найти подходящий пример. Я знаком с PHP, но новичок в Javascript и не могу понять, как потопить CZML.Цезий: потоковый пример CZML

Я хочу показать около 6.500 активов на карте. Чтобы предотвратить появление веб-страницы ПОСЛЕ того, что все загружено (и тестирование терпения пользователей), я хочу, чтобы он показывал, а затем загружал активы в фоновом режиме.

Может ли кто-нибудь указать мне пример того, как это сделать? я могу управлять, чтобы загрузить файл 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 Спасибо

+0

Уточняйте свой вопрос немного? Вы пытаетесь передать 6.500 баллов с помощью сервера через REST/Websocket или вы вытаскиваете 6,500 баллов из одного файла? Если это последний, вам просто нужно будет загрузить файл один раз, а затем пропустить элементы. CZML основан на JSON, поэтому его можно рассматривать как таковой https://github.com/AnalyticalGraphicsInc/cesium/wiki/CZML-Guide –

+0

Скобки в начале и в конце опубликованного файла CZML не должны быть частью реального поток событий. – JasonM1

ответ

3

Если есть источник потокового CZML сети.! то код JavaScript клиента должен вызывать процесс(), а чем load() для настройки потоковой передачи источника.

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, чтобы text/event-stream.

Чтобы отменить поток от клиента, просто звоните:

czmlEventSource .close(); 

Чтобы отменить поток с сервера, реагировать с не «текст/событие потока» Content-Type или возвращает статус HTTP другой чем 200 OK (например, 404 Not Found).

Если вы загружаете статический файл CZML, то вызывайте load() с URL-адресом или ссылкой относительного файла.

var dataSource= Cesium.CzmlDataSource.load('some_file.czml'); 
viewer.dataSources.add(dataSource);