Time dynamic data from js function

Hello Cesium community,

I am trying to make an application which would vizualize a trajectory of a low Earth spacecraft. This is easily achievable by loading a czml. However, I would like to provide cesium the position at any time myself. For example, I would like to write a javascript function taking time as input and providing a cartesian position for a perfectly circular orbit as output. Is there a way to pass this function to cesium so it can vizualize it, for example with a trail and attached model ?

To give a bit of context, the idea behind my app is to allow vizualization of trajectories stored on server side in a binary format. I have a c library to read/interpolate these files. I wrote a node js addon to call the library from a node js script. Now, I could write a js function on the client/browser side which would take time as input, call the server (I was thinking of socket.io) and receive the position which would then be passed to Cesium.

I am quite new to cesium/js. In fact I ‘dived’ into js only because of cesium… So my question may be naive or the answer obvious.

Hi Petr,

Sounds like a great project you are working on. Here are some resources for time dynamic data where you can control the position that can help you get started:

Moving vehicle with interpolated positions

Building a flight tracker with custom JSON latitude, longitude, and height data

Please follow up with additional questions as necessary.

Hi Dzung,

the vehicle example is really nice ! The Cesium.CallbackProperty is what I was looking for. Its a user defined function of time used in the example to set the text and the wheel orientation. I tried if its possible to set an entity’s position with the CallbackProperty as well and it works:

function updatePosition(time, result) {

          var tt = Cesium.JulianDate.secondsDifference(time, start);
          
          var currentPosition = new Cesium.Cartesian3();
          currentPosition.x = startPosition.x + tt * (endPosition.x - startPosition.x);
          currentPosition.y = startPosition.y + tt * (endPosition.y - startPosition.y);
          currentPosition.z = startPosition.z + tt * (endPosition.z - startPosition.z);
          
          return currentPosition;
    }

var vehicleEntity = viewer.entities.add({
    position: new Cesium.CallbackProperty(updatePosition, false),
(...)

The car changes linearly its position as specified in the updatePosition function.

Many thanks for your help.

1 Like

Great! Glad you found it helpful. Welcome to the Cesium community!