Skip to content

概述

在 Cesium 中,实体(Entity)的运动轨迹 是指一个物体(飞机、车辆、人、卫星等)在一段时间内沿着空间路径移动的过程。Cesium 通过 时间驱动 + 位置采样等实现实体的动态运动。

javascript
const timeStepInSeconds = 30
const totalSeconds = timeStepInSeconds * (flightData.length - 1)
const start = Cesium.JulianDate.fromIso8601("2020-03-09T23:10:00Z")
const stop = Cesium.JulianDate.addSeconds(start, totalSeconds, new Cesium.JulianDate())
viewer.clock.startTime = start.clone()
viewer.clock.stopTime = stop.clone()
viewer.clock.currentTime = start.clone()
viewer.timeline.zoomTo(start, stop)
viewer.clock.multiplier = 50
viewer.clock.shouldAnimate = true  // 也可以在配置中设置shouldAnimate

const positionProperty = new Cesium.SampledPositionProperty()

for (let i = 0; i < flightData.length; i++) {
  const dataPoint = flightData[i]
  const time = Cesium.JulianDate.addSeconds(start, i * timeStepInSeconds, new Cesium.JulianDate())
  const position = Cesium.Cartesian3.fromDegrees(dataPoint.longitude, dataPoint.latitude, dataPoint.height)
  positionProperty.addSample(time, position)
  viewer.entities.add({
    description: `Location: (${dataPoint.longitude}, ${dataPoint.latitude}, ${dataPoint.height})`,
    position,
    point: { pixelSize: 10, color: Cesium.Color.RED }
  })
}
const pointEntity = viewer.entities.add({
  // 在规定的start和stop之间实体是可见的
  availability: new Cesium.TimeIntervalCollection([new Cesium.TimeInterval({ start: start, stop: stop })]),
  position: positionProperty,
  point: { pixelSize: 30, color: Cesium.Color.GREEN },
  path: new Cesium.PathGraphics({ width: 3 })
})
viewer.trackedEntity = pointEntity
/