Поток CZML в цезий с использованием HTML5 EventSource

В настоящее время я изучаю использование цезия как способ визуализации данных для личного проекта, а обновления в реальном времени - отличная вещь, которую можно сделать.

Чтение wiki, я нашел этот раздел, в котором описывается, как динамическое обновление объектов в цезие может быть выполненных с использованием HTML EventSource API.

Я написал довольно простой сервер в Node.js, который создает text/event-stream, который периодически отправляет обновления позиции объекта. Эта часть работает отлично, и я могу успешно подключиться к этим данным и занести их в консоль.

Моя проблема связана с цезием. Я потратил часы, прорывая документацию (как викторину Github, так и документацию JSDoc, включенную в загрузку), и я не могу понять, как добавить мой CZML для добавления в глобус. Используя приложение Cesium Viewer, поставляемое с исходным кодом, я могу видеть, как файлы CZML могут быть загружены из локальных и удаленных ресурсов, но я не могу понять, как изменить этот подход для приема пакетов CZML, поступающих из событий EventSource.

Образец моих 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 в случае, если это имеет значение. Если вам нужна дополнительная информация от меня, чтобы быть в состоянии помочь, пожалуйста, спросите, и я обновлю вопрос.

Я попробовал Google для решения и пример кода, но я ничего не могу найти, кроме wiki page описание использования EventSource.

Ответ 1

Я знаю, что этот вопрос несколько недель, но вы когда-нибудь это выясняли? Из приведенного выше примера первое, что я замечаю, это то, что вы вызываете czmlStream.load вместо czmlStream.process. load очищает существующие данные, а process - нет. Для потоковой передачи вызов нагрузки приводит к появлению только последнего пакета.