如何获取Cesium中数据的索引

How to get the index of data in Cesium

我已经成功实施了有关如何构建航班跟踪器的教程。我希望能够在我的应用程序的当前时间访问我的数据索引。换句话说,当铯正在显示飞机沿着飞行路径的动画时,我怎样才能得到飞机所在的当前索引? (我的数据的索引)。

我有两个实体,一个在循环下生成路径的所有点,另一个在我加载飞机模型的地方。我需要将应用程序的其他部分与 Cesium 的当前状态同步。 (如果我暂停Cesium,我需要暂停其他东西等等)

我正在使用 Resium。顺便提一句。这是我的飞机模型。它根据从 const positionProperty = new SampledPositionProperty();

派生的位置 属性 进行动画处理
 // this is the loop that draws the path with points
 {flightData.map((data, i) => {
    const time = JulianDate.fromIso8601(data.timestamp);
    const position = Cartesian3.fromDegrees(
      data.longitude,
      data.latitude,
      data.height + 5.0
    );
    // here we add a sample, per object in the array 
    positionProperty.addSample(time, position);

    return (
      <Entity
        key={`${i}${position}`}
        position={position}
        point={{ pixelSize: 5, color: PhaseColors[data.phase] }}
      />
    );
  })}

// this is the airplane model that follows the path above
<Entity
style={{ border: "10px solid green" }}
// Here is where we pass the positionProperty sample. How can I get the current index out of this? 
position={positionProperty} 
// Automatically compute the orientation from the position.
orientation={new VelocityOrientationProperty(positionProperty)}
tracked
selected
model={{ uri: model, minimumPixelSize: 100, maximumScale: 100.0 }}
path={
  new PathGraphics({
    width: 3,
    material: Color.fromCssColorString("#202025"),
  })
}
availability={
  new TimeIntervalCollection([
    new TimeInterval({ start: start, stop: stop }),
  ])
}

我想到的一种方法是使用时钟并获取时间戳。使用时间戳,我可以查找自己的数据。但我想避免这种情况,这非常昂贵。

有铯专家吗? :D

您可能正在寻找 SampledPositionProperty.getValue(...)

您有一个类型为 SampledPositionProperty 的变量 positionProperty。它被标记为 const,但我认为这是不正确的,因为您是在构造后向其添加样本。

无论如何,要从那里获取数据,您需要这样调用:

var currentPos = positionProperty.getValue(clock.currentTime);

请注意,这个 returns 是一个完整的 Cartesian3 位置,而不是索引。这是因为 clock.currentTime 可能落在索引之间,而 positionProperty 将在中间时间平滑地插入。