【问题标题】:How to create an orbit of a satellite and animate it with SGP4 model?如何创建卫星轨道并使用 SGP4 模型对其进行动画处理?
【发布时间】:2019-04-06 08:56:19
【问题描述】:

我是 Cesium 和 Javascript 代码的初学者。我需要在全球范围内创建卫星 (ESEO) 的轨道。卫星必须按照 SGP4 模型移动。如何在铯沙堡中创建它? 我遇到了麻烦,因为我没有在网上找到任何解释如何做的教程或示例。 目前,我只将地面站定位在地球上我想要的位置。

var viewer = new Cesium.Viewer ('cesiumContainer', {
    scene3DOnly: false,
    selectionIndication: false,
    baseLayerPicker: true
                                });

Cesium.Ion.defaultAccessToken = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJqdGkiOiI4ODY0ZjkwMy03YmZlLTRlNGEtYmNhOS0xMDBlZGVmNDRkZGMiLCJpZCI6OTE4MSwic2NvcGVzIjpbImFzciIsImdjIl0sImlhdCI6MTU1MzYxMjM5Mn0.aYYX1f1MQfg9zLFu0vnP3A56Neo4Y_N3G2O5tuTS0XM';

// Enable lighting based on sun/moon positions
viewer.scene.globe.enableLighting = true;

//Stazione di terra
var entity = viewer.entities.add({
  position: Cesium.Cartesian3.fromDegrees(12.04, 44.23),
  ellipse : {
    semiMinorAxis : 150000.0,
    semiMajorAxis : 150000.0,
    material : Cesium.Color.YELLOW.withAlpha(0.5)
  }
});
var ellipse = entity.ellipse;
ellipse.material = new Cesium.GridMaterialProperty({
  color : Cesium.Color.YELLOW,
  cellAlpha : 0.2,
  lineCount : new Cesium.Cartesian2(8, 8),
  lineThickness : new Cesium.Cartesian2(2.0, 2.0)
});


var GroundStation = viewer.entities.add({
    name : 'Ground Station',
    position : Cesium.Cartesian3.fromDegrees(12.07, 44.23),
    point : {
        pixelSize : 5,
        color : Cesium.Color.RED,
        outlineColor : Cesium.Color.WHITE,
        outlineWidth : 2
    },
    label : {
        text : 'Ground Station',
        font : '14pt monospace',
        style: Cesium.LabelStyle.FILL_AND_OUTLINE,
        outlineWidth : 2,
        verticalOrigin : Cesium.VerticalOrigin.BOTTOM,
        pixelOffset : new Cesium.Cartesian2(0, -9)
    }
});

【问题讨论】:

  • 不太可能有针对如此具体的内容的教程。但这听起来基本上是一个数学模型。所以应该有一些算法或计算要做。计算机擅长数学,大多数编程语言,包括 JavaScript,都有很多数学函数和运算符可以使用,你只需要查找它们即可。我会先在纸上计划好你的计算,然后一步一步地尝试弄清楚如何让代码执行每个计算。在您至少尝试自己开始之前,这里的任何人都不太可能会帮助您
  • 我已经完成了数学模型,但现在的问题是在铯沙堡上创建轨道。我不知道如何可视化它上面的路径和卫星运动
  • 所以您想对其进行图形显示,而不仅仅是计算?我不确定问题是否明确。您是否已经完成了这个 Cesium 工具的基础知识来研究如何制作简单的形状等?
  • 是的,第一个问题是使用像周期、半轴长、偏心率这样的参数创建一个通用轨道......就像一个 STK 场景。我想显示路径和一个点,代表卫星,在它上面移动。我已经说过了,我是 Cesium 和 Javascript 的初学者,我正在尝试使用教程和示例来学习,但是我找不到任何东西。
  • 我在cesium js页面上使用了这些教程:cesium.com/docs

标签: javascript cesium satellite


【解决方案1】:

当人们在 Cesium 中绘制轨道时,他们通常使用折线而不是您使用的椭圆实体。

多段线/多段线集合的链接:https://cesiumjs.org/Cesium/Build/Documentation/Polyline.html

现在关于 SGP4,这个传播器采用 NORAD 两行元素。因此,如果您有轨道参数,您可以创建自己的 TLE。这应该很容易在外部 python 程序中完成,并将其写入 JSON 文件,该文件可以读入 javascript,然后传递给传播器。有关 TLE 的更多信息,维基百科对它的格式有很好的描述。

TLE 信息:https://en.wikipedia.org/wiki/Two-line_element_set

对于实际的 SGP4 实现,有一个 Satellite.js 包,其 github 链接如下。他们能够正确实现接收 NORAD TLE 并输出轨迹信息的传播器。

Satellite.js github:https://github.com/shashwatak/satellite-js

我很确定您必须将 TLE 转换为不同的参数,然后传递给传播它的卫星 js 模块。

当您执行此操作时,我强烈建议您创建一个工作线程来执行代码,因为开销很大。您不希望所有繁重的数学运算与 Cesium 的图形渲染一起完成。

另一个重要提示:如果可以避免,您绝对不需要使用 SGP4。您应该创建适合您项目需求的自己的传播器。轨道确定可能很棘手,但比使用用于 NORAD 卫星跟踪的传播器要好得多。

【讨论】:

    【解决方案2】:

    您可以查看此项目以演示 aaastro 的答案中列出的一些项目。

    jspredict

    您还可以查看这篇出色的论文和支持资源,以进一步了解 TLE、SGP4、Cesium。

    Spacemission

    Visualization of Orbital Debris with Cesium and Satellite-js

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-16
      • 1970-01-01
      • 1970-01-01
      • 2013-01-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多