代码效果
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;