Wrapping sampled positions in a time interval collection

Is there a simple example of wrapping sampled positions in a TimeIntervalCollectionPositionProperty? I think I understand conceptually how it’s supposed to work, and I’ve been able to use it with fixed cartesian data, but I’ve only gotten errors when trying to use it with ranges of sampled positions.

I’ve constructed the following example in sandcastle with two sampled position properties and a TimeIntervalCollectionPositionProperty that combines them. Either sampled position property seems to work ok, but the combined version does not. Perhaps I’m not providing data in the right way?

Any help would be appreciated. Thanks!

const viewer = new Cesium.Viewer("cesiumContainer");

const combinedPosition = new Cesium.TimeIntervalCollectionPositionProperty();

const sampledPositionA = new Cesium.SampledPositionProperty();
const timeA1 = Cesium.JulianDate.fromDate(new Date(1755180800000));
const timeA2 = Cesium.JulianDate.fromDate(new Date(1755181400000));
sampledPositionA.addSample(
  timeA1,
  Cesium.Cartesian3.fromDegrees(-114.0, 40.0, 300000.0),
);
sampledPositionA.addSample(
  timeA2,
  Cesium.Cartesian3.fromDegrees(-84.0, 40.0, 300000.0),
);

const sampledPositionB = new Cesium.SampledPositionProperty();
const timeB1 = Cesium.JulianDate.fromDate(new Date(1755190800000));
const timeB2 = Cesium.JulianDate.fromDate(new Date(1755191400000));
sampledPositionB.addSample(
  timeB1,
  Cesium.Cartesian3.fromDegrees(-114.0, 20.0, 300000.0),
);
sampledPositionB.addSample(
  timeB2,
  Cesium.Cartesian3.fromDegrees(-84.0, 20.0, 300000.0),
);

combinedPosition.intervals.addInterval(
  new Cesium.TimeInterval({
    start: timeA1,
    stop: timeA2,
    isStartIncluded: true,
    isStopIncluded: false,
    data: sampledPositionA,
  }),
);
combinedPosition.intervals.addInterval(
  new Cesium.TimeInterval({
    start: timeB1,
    stop: timeB2,
    isStartIncluded: true,
    isStopIncluded: false,
    data: sampledPositionB,
  }),
);

const blueBox = viewer.entities.add({
  name: "Blue box",
  position: sampledPositionA,
  // position: combinedPosition,
  box: {
    dimensions: new Cesium.Cartesian3(400000.0, 300000.0, 500000.0),
    material: Cesium.Color.BLUE,
  },
});

viewer.clock.currentTime = timeA1
viewer.zoomTo(viewer.entities);

Hi @JasonP,

Welcome to the Cesium community! I’ll start by saying, I’m not really familiar with TimeIntervalCollectionPositionProperty, but I don’t think it accepts a SampledPositionProperty as data. CompositePositionProperty, however, seems to accomplish what it looks like you want to do.

Here’s a sandcastle demo

Let me know if that helps!

Best,
Matt

Thanks, @mzschwartz5 , that does seem to help. It looks like TimeIntervalCollectionPositionProperty works with raw cartesian data, whereas CompositePositionProperty works with position properties (either sampled or constant). I’ll stick with the latter.

Thanks again!

1 Like