如何使用CesiumJs添加卫星并显示其绕地球的轨道路径?
CesiumJS实现卫星绕地运行并显示轨道
下面是直接可用的代码示例,适配你的需求,包含红色卫星圆点、轨道显示和自动绕地运行逻辑:
// 初始化Cesium Viewer const viewer = new Cesium.Viewer('cesiumContainer', { animation: true, // 显示时间动画控件 timeline: true, // 显示时间线 shouldAnimate: true // 默认开启动画 }); // 定义卫星轨道参数 const orbitalHeight = 400000; // 轨道高度,单位米 const orbitalPeriod = 90 * 60; // 轨道周期,90分钟转一圈,单位秒 const inclination = Cesium.Math.toRadians(45); // 轨道倾角45度 // 创建卫星实体 const satellite = viewer.entities.add({ name: '我的卫星', // 红色圆点卫星模型 point: { pixelSize: 8, color: Cesium.Color.RED, outlineColor: Cesium.Color.WHITE, outlineWidth: 2 }, // 轨道路径设置 path: { resolution: 1, material: new Cesium.PolylineGlowMaterialProperty({ glowPower: 0.1, color: Cesium.Color.CYAN }), width: 3, show: true } }); // 计算卫星随时间变化的位置 const startDate = viewer.clock.startTime; const stopDate = viewer.clock.stopTime; const timeStepInSeconds = 60; // 每60秒记录一个位置点 // 生成轨道位置采样数据 const positionProperty = new Cesium.SampledPositionProperty(); let time = startDate; while (time < stopDate) { // 计算当前时间对应的轨道角度 const angle = Cesium.Math.TWO_PI * ((time.getTime() - startDate.getTime()) / 1000) / orbitalPeriod; // 计算卫星的经纬度和高度 const longitude = angle; const latitude = inclination * Math.sin(angle); // 模拟倾斜轨道的纬度变化 const height = orbitalHeight; // 将经纬度高度转换为Cartesian3坐标 const position = Cesium.Cartesian3.fromRadians(longitude, latitude, height); // 添加位置采样点 positionProperty.addSample(time, position); // 推进时间 time = Cesium.JulianDate.addSeconds(time, timeStepInSeconds, new Cesium.JulianDate()); } // 将采样位置绑定到卫星实体 satellite.position = positionProperty; // 自动定位到卫星 viewer.trackedEntity = satellite;
代码解释:
- Viewer初始化:开启动画和时间线控件,默认自动播放动画,直接查看卫星运行效果。
- 轨道参数:可调整
orbitalHeight(轨道高度)、orbitalPeriod(运行周期)、inclination(轨道倾角)修改卫星轨迹。 - 卫星实体:保留你原本的红色圆点,新增
path属性实现发光青色轨道显示。 - 位置采样:通过
SampledPositionProperty存储卫星不同时间点的位置,Cesium自动插值让运行更平滑。 - 轨道计算:用三角函数模拟倾斜轨道运行;若需真实轨道,可替换为TLE(两行轨道数据)解析逻辑:
// 示例TLE数据(可替换为目标卫星的TLE) const tleLines = [ '1 25544U 98067A 24180.50000000 .00016717 00000+0 30271-3 0 9001', '2 25544 51.6416 123.4567 0001234 98.7654 261.2345 15.49876543 9002' ]; const tle = Cesium.Tle.fromStrings(tleLines[0], tleLines[1]); const satellitePosition = Cesium.SampledPositionProperty.fromTle(tle); satellite.position = satellitePosition;
常见问题解决:
之前示例无法运行大概率是Cesium版本差异或缺少必要控件(如未开启动画),上述代码基于最新稳定版编写,直接复制即可运行。
内容的提问来源于stack exchange,提问作者Amber_R
相关产品推荐
相关产品推荐

