demo_03_卫星加站点
All checks were successful
/ depcheck (push) Successful in 2m26s
/ lint-build-and-check (push) Successful in 3m6s
/ build-and-deploy-to-vercel (push) Successful in 3m2s
/ surge (push) Successful in 2m46s
/ playwright (push) Successful in 5m26s

This commit is contained in:
严浩
2025-03-14 14:42:06 +08:00
parent 8963fe99ff
commit 9f0bed4513
6 changed files with 79 additions and 13 deletions

View File

@ -26,6 +26,15 @@ export const DEMO_DATA = {
RA_OF_ASC_NODE: 63.0294,
REV_AT_EPOCH: 13,
},
get tleLine1() {
return this.tleString.split('\n')[1];
},
get tleLine2() {
return this.tleString.split('\n')[2];
},
get tleName() {
return this.tleString.split('\n')[0];
},
tleString: `2025-045B
1 63158U 25045B 25071.65907894 .00072212 -50502-6 39937-3 0 9999
2 63158 19.0363 63.0294 7375486 181.9338 171.6150 2.21786616 127`,

View File

@ -0,0 +1,53 @@
import type { Viewer } from 'cesium';
import * as Cesium from 'cesium';
export function demo_卫星加站点(viewer: Viewer) {
// 1. 添加一个卫星
const satellite = viewer.entities.add({
label: {
font: '14pt monospace',
pixelOffset: new Cesium.Cartesian2(0, 20),
text: '卫星',
},
name: '测试卫星',
point: {
color: Cesium.Color.RED,
pixelSize: 10, // 卫星显示为一个点
},
position: Cesium.Cartesian3.fromDegrees(114, 40, 500_000), // 经度、纬度、高度500km
});
// 2. 添加一个地面检测站点
const detectionSite = viewer.entities.add({
label: {
font: '14pt monospace',
pixelOffset: new Cesium.Cartesian2(0, 20),
text: '检测站',
},
name: '检测站点',
point: {
color: Cesium.Color.BLUE,
pixelSize: 8,
},
position: Cesium.Cartesian3.fromDegrees(116, 39, 0), // 北京附近的一个地面站点
});
// 3. 可选:绘制卫星与站点之间的连线
viewer.entities.add({
polyline: {
material: Cesium.Color.YELLOW.withAlpha(0.5),
positions: new Cesium.CallbackProperty(() => {
const satellitePosition = satellite.position?.getValue(Cesium.JulianDate.now());
const sitePosition = detectionSite.position?.getValue(Cesium.JulianDate.now());
if (!satellitePosition || !sitePosition) {
return [];
}
return [satellitePosition, sitePosition];
}, false),
width: 2,
},
});
}

View File

@ -1,20 +1,21 @@
/* eslint-disable perfectionist/sort-objects */
/* prettier-ignore */
export const TOOLTIP_MAP = {
ARG_OF_PERICENTER_近地点幅角: "8位数字,如'181.9338'表示近地点相对升交点的角度范围0°-360°",
BSTAR_BSTAR拖曳项: "BSTAR参数。8位科学计数法如'39937-3'表示0.39937×10⁻³/地球半径,表示大气拖曳影响",
NORAD_CAT_ID_卫星编号: "5位数字,如'63158'表示NORAD卫星唯一目录编号",
CLASSIFICATION_TYPE_卫星分类: "1个字母如'U',表示数据分类",
ECCENTRICITY_离心率: "7位数字无小数点如'7375486'表示0.7375486,小数点隐含在最前面",
ELEMENT_SET_NO_元素集编号: "4位数字如'9999'表示TLE版本号",
EPHEMERIS_TYPE_星历类型: "通常为'0'表示使用SGP4星历模型",
OBJECT_ID_国际标识符: "8个字符如'25045B'(年份+发射编号+部件),不足时右侧补空格",
EPOCH_历元时间: "14位数字如'25071.65907894',表示轨道数据的参考时间(年份+年积日.一天中的小数部分)",
MEAN_MOTION_DOT_平均运动一阶导数: "10位数字如'.00072212',表示平均运动变化率的一半,单位圈/天²,左侧补空格",
MEAN_MOTION_DDOT_平均运动二阶导数: "8位科学计数法如'-50502-6'表示-5.0502×10⁻⁶圈/天³,最后一位是指数",
BSTAR_BSTAR拖曳项: "BSTAR参数。8位科学计数法如'39937-3'表示0.39937×10⁻³/地球半径,表示大气拖曳影响",
EPHEMERIS_TYPE_星历类型: "通常为'0'表示使用SGP4星历模型",
ELEMENT_SET_NO_元素集编号: "4位数字如'9999'表示TLE版本号",
// CHECKSUM_校验和: "1位数字用于验证数据完整性可选项",
INCLINATION_轨道倾角: "8位数字如'19.0363'表示轨道与赤道平面的夹角范围0°-180°",
MEAN_ANOMALY_平近点角: "8位数字如'171.6150'表示历元时的平近点角范围0°-360°",
MEAN_MOTION_DDOT_平均运动二阶导数: "8位科学计数法如'-50502-6'表示-5.0502×10⁻⁶圈/天³,最后一位是指数",
MEAN_MOTION_DOT_平均运动一阶导数: "10位数字如'.00072212',表示平均运动变化率的一半,单位圈/天²,左侧补空格",
MEAN_MOTION_平均运动: "11位数字如'2.21786616',表示卫星每天绕地球的圈数(圈/天)",
NORAD_CAT_ID_卫星编号: "5位数字如'63158'表示NORAD卫星唯一目录编号",
OBJECT_ID_国际标识符: "8个字符如'25045B'(年份+发射编号+部件),不足时右侧补空格",
RA_OF_ASC_NODE_升交点赤经: "8位数字如'63.0294'表示轨道升交点的赤经范围0°-360°",
ECCENTRICITY_离心率: "7位数字无小数点如'7375486'表示0.7375486,小数点隐含在最前面",
ARG_OF_PERICENTER_近地点幅角: "8位数字如'181.9338'表示近地点相对升交点的角度范围0°-360°",
MEAN_ANOMALY_平近点角: "8位数字如'171.6150'表示历元时的平近点角范围0°-360°",
MEAN_MOTION_平均运动: "11位数字如'2.21786616',表示卫星每天绕地球的圈数(圈/天)",
REV_AT_EPOCH_历元时的圈数: "5位数字如'13',表示卫星在历元时完成的轨道圈数",
};

View File

@ -1,15 +1,16 @@
<script setup lang="ts">
import type { Viewer } from 'cesium';
import { TLE_LIST } from './cesium-demos/_TLE_DATA';
import { demo_卫星加站点 } from './cesium-demos/demo_03_卫星加站点';
import { cesium_init } from './cesium-helper/00.cesium-init';
import { TLE_LIST } from './cesium-helper/_TLE_DATA';
import SatelliteSelector from './components/SatelliteSelector.vue';
// Cesium相关
let viewer = $ref<null | Viewer>(null);
const tleList = ref([TLE_LIST[0]] as string[]);
const spinning = ref(true);
const spinning = ref(false);
// 模拟接口获取TLE数据
const fetchTLEData = async () => {
@ -29,6 +30,8 @@ onMounted(async () => {
viewer = cesium_init(container);
Object.assign(globalThis, { viewer });
demo_卫星加站点(viewer);
});
// 清理资源