TLE 生成 Cesium CZML 卫星轨道数据

956 阅读1分钟

代码效果

请添加图片描述

1. 获取 TLE 数据

TLE 数据获取地址:www.space-track.org/#catalog

TLE 数据示例

1 53999U 22125AM  22295.25001157  .00045000  00000-0  32366-3 0  9990
2 53999  53.2195  10.9850 0002252  14.3368 189.3658 15.73174633  2957

2. 生成 czml 数据

const data = [
 {
   id: 'document',
   name: 'CZML Point - Time Dynamic',
   version: '1.0',
   clock: {
     interval: `${startTime}/${endTime}`,
     multiplier: 1,
     range: 'LOOP_STOP',
     step: 'SYSTEM_CLOCK'
   }
 }
];

for (const spacecraft of satellites) {
  const tleLine = spacecraft.tle;

  const res = []; // result for position
  const satrec = satelliteJs.twoline2satrec(tleLine[0], tleLine[1]); // Set satrec

  const initialTime = moment().toISOString(); // start date of TLE

  // tle 星历时间
  const initialSec = moment(initialTime).unix();
  const startSec = moment(startTime).unix();
  const endSec = moment(endTime).unix();

  // 基于开始时间和结束时间,生成对应的轨道位置数据
  

  data.push({
    id: `${spacecraft.code}`,
    name: `${spacecraft.code}`,
    availability: `${startTime}/${endTime}`,
    description: 'Insert the altitude here??',
    label: {
      fillColor: {
        rgba: [255, 0, 255, 255]
      },
      font: '11pt Lucida Console',
      horizontalOrigin: 'LEFT',
      outlineColor: {
        rgba: [0, 0, 0, 255]
      },
      outlineWidth: 2,
      pixelOffset: {
        cartesian2: [12, 0]
      },
      show: true,
      style: 'FILL_AND_OUTLINE',
      text: `${spacecraft.code}`,
      verticalOrigin: 'CENTER'
    },
    path: {
      show: [
        {
          interval: `${initialTime}/${endTime}`,
          boolean: true
        }
      ],
      width: 1,
      material: {
        solidColor: {
          color: {
            rgba: [255, 255, 0, 255]
          }
        }
      },
      resolution: 120,
      leadTime: 2850,
      trailTime: 2850
    },
    billboard: {
      horizontalOrigin: 'CENTER',
      image:
        'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAADJSURBVDhPnZHRDcMgEEMZjVEYpaNklIzSEfLfD4qNnXAJSFWfhO7w2Zc0Tf9QG2rXrEzSUeZLOGm47WoH95x3Hl3jEgilvDgsOQUTqsNl68ezEwn1vae6lceSEEYvvWNT/Rxc4CXQNGadho1NXoJ+9iaqc2xi2xbt23PJCDIB6TQjOC6Bho/sDy3fBQT8PrVhibU7yBFcEPaRxOoeTwbwByCOYf9VGp1BYI1BA+EeHhmfzKbBoJEQwn1yzUZtyspIQUha85MpkNIXB7GizqDEECsAAAAASUVORK5CYII=',
      pixelOffset: {
        cartesian2: [0, 0]
      },
      scale: 2,
      show: true,
      verticalOrigin: 'CENTER'
    },
    position: {
      interpolationAlgorithm: 'LAGRANGE',
      interpolationDegree: 2,
      referenceFrame: 'INERTIAL',
      epoch: `${initialTime}`,
      cartesian: res
    }
  });
}
return data;

3. Cesium 加载数据

const data = createCzmlData();
const dataSource = Cesium.CzmlDataSource.load(data);
window.CesiumViewer.dataSources.add(dataSource);
window.CesiumViewer.clock.multiplier = 1;
window.CesiumViewer.clock.shouldAnimate = true;

完整项目代码,请vx搜索:shiji_vx 获取