You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Cesium中使用Polyline绘制卫星轨道线实现轨迹可视化

错误原因

  • 混用Cesium的Primitive和Entity两套API:PolylineCollection属于底层Primitive体系的类,无法作为参数传入仅接受Entity实例的viewer.entities.add()方法。
  • 参数类型不匹配:PolylineCollection.add()的positions字段仅支持静态Cartesian3坐标数组,不支持你传入的时间动态SampledPositionProperty类型,所以无法渲染。

修正方案

直接使用Entity API的polyline属性绘制轨道即可,不需要额外引入PolylineCollection,修改步骤如下:

  1. 删掉你代码中所有和PolylineCollection相关的声明、添加、更新逻辑。
  2. 在计算采样位置的循环中新增一个静态坐标数组,存储所有轨道点坐标。
  3. 在添加卫星点的Entity中新增polyline配置,传入静态坐标数组即可。

修正后代码片段

采样位置部分修改

const positionsOverTime = new Cesium.SampledPositionProperty();
const staticOrbitPositions = []; // 新增静态轨道坐标数组
let p;
let position;

for (let i = 0; i < totalSeconds; i+= timestepInSeconds) {
  const time = Cesium.JulianDate.addSeconds(start, i, new Cesium.JulianDate());
  const jsDate = Cesium.JulianDate.toDate(time);

  const positionAndVelocity = satellite.propagate(TLErec, jsDate);
  const gmst = satellite.gstime(jsDate);
  p = satellite.eciToGeodetic(positionAndVelocity.position, gmst);

  position = Cesium.Cartesian3.fromRadians(p.longitude, p.latitude, p.height * 1000);
  positionsOverTime.addSample(time, position);
  staticOrbitPositions.push(position); // 存入静态数组
}

卫星与轨道渲染部分(替换你原来的重点求助代码)

// Set Random Color
let randomColor = Math.floor(Math.random()*16777215).toString(16);

// 同一个Entity同时包含卫星点和轨道线
const satellitePoint = viewer.entities.add({
  position: positionsOverTime,
  point: { pixelSize: 5, color: Cesium.Color.fromCssColorString(`#${randomColor}`) },
  // 新增轨道线配置
  polyline: {
    positions: staticOrbitPositions,
    width: 2,
    material: Cesium.Color.fromCssColorString(`#${randomColor}`).withAlpha(0.7)
  }
});

其他优化建议

你当前把时钟的起止时间、倍速等配置放在了TLE遍历循环内部,会导致每次循环都覆盖时钟配置,建议把这部分逻辑移到plotSAT函数外部,避免重复赋值。

内容的提问来源于stack exchange,提问作者CodeKeanu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.10 22:06:03