Streaming realtime data to CesiumJS

We are trying to use Cesium for streaming real time data to a 3D map, the visualization has a low latency requirement. Though to some extend we get things working, we seem to run into the limits of what’s possible. We’re trying to stream several MB of data per second to Cesium, the overhead caused by this increases quickly while reducing the frame rate. What do you think of the feasibility using Cesium / WebGL for such a scenario?

The short answer is yes, you can do this with CesiumJS. Any Cesium example you see using 3D Tiles is streaming a lot of data to the browser (like this 10 billion point clouds of Montreal:

What limits are you running into? How are you streaming the data? What kind of data is it?

Hi Omar,

Thanks for your reply. What we encounter is that getting the data in is working pretty well, when we try to update are data multiple times a second we see that the performance starts lagging. To elaborate a bit on our use case, we trying to visualize a data set, of around 6000 points (which is relatively small compared to the Montreal example), but we are updating this data set multiple times a second. Above around 2000 points we see a drop in performance, which might be by our wrong doing. We tried batching the set to reduce the data transfer overhead, but we have a fairly low latency requirement.

Beside the data point we trying to render multiple texture (between 1 and 5) of around 2000 x 2000 pixels at the same time. Also these texture are partially updated several times a second.

The data comes through a WebSocket connection, for the data points we’re using the Cesium API.

It’s hard to tell where the issue is without knowing more about how you’re making these updates. Are you using the Entity API or the Primitive API? Are you using CallbackProperties for the dynamic entities?

If you can reproduce the issue in Sandcastle and paste a link here that we can run that would help. You can share your code example by clicking the “Share” button at the top.

@omar i have a somewhat related question.

I’m using the free version of Cesium and I need to develop a visualisation in which there’s some data being live streamed into the app. The data will be custom attributes for a few buildings and Updated every free seconds.

I just need to be able to show those custom attributes in the info box when a user clicks on a building.

Is there a simple way to:

  1. update the data in the free version of Cesium?
  2. display the custom attributes?

I assume I can just save the custom attributes into a shape file layer and load that layer in Cesium? Is that correct?