В настоящее время я изучаю использование цезия как способ визуализации данных для личного проекта, а обновления в реальном времени - отличная вещь, которую можно сделать.
Чтение 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.