【问题标题】:Cesium Earth: Show satellites in ECI coordinate systemCesium Earth:在 ECI 坐标系中显示卫星
【发布时间】:2018-06-04 14:30:09
【问题描述】:

我正在使用Cesium Earth 开发卫星跟踪应用程序。

现在,卫星坐标在地球固定系统中,并且可以正常工作。

但是,我还需要在 ECI 坐标系中显示它们,为此我必须让地球旋转。

怎么做?

【问题讨论】:

  • 刚刚注意到您的webgl-earth 标签。我在下面的回答是针对核心铯,而不是 webgl-earth。我认为 webgl-earth 删除或隐藏了卫星和 ECI 所需的一些 Cesium 功能。
  • 我用 Cesium,去掉标签

标签: javascript cesium


【解决方案1】:

首先我要提到的是,Cesium 经常使用 ICRF 这个名称作为 ECI 的同义词或替代品,所以如果您正在搜索文档,那么您会更幸运地找到 ICRF。

CZML Sandcastle Demo 显示了一些绕地球运行的卫星,其路径显示在惯性框架中。这是done in the CZML file,通过做两件事:

  • position 部分中设置值"referenceFrame":"INERTIAL"
  • 所有实际的position 值本身必须以惯性而非固定框架表示。

你可以看出路径是惯性的,因为它是一个椭圆。如果它以地球固定的方式显示,它看起来就像一个螺旋,在地球周围疯狂地循环。随着时间的推移,轨道椭圆当然应该与恒星保持在惯性系中,而不是固定在地球上任何一个陆地之上。

但是,我还需要在 ECI 坐标系中显示它们,为此我必须让地球旋转。

这是两个不同的问题。在 Cesium 中,地球的固定坐标系已经相对于 ICRF 坐标系旋转(内部)。但默认情况下,相机保持在地球固定 (ECF) 模式。所以用户看到地球看起来是静止的,而恒星和卫星轨道看起来是围绕地球旋转的。这实际上是一种有效的观察系统的方法,就好像相机只是卡在一个非常高的杆上,连接到地球上,扫过不同的轨道。

要使地球在屏幕上随着时间的推移在视觉上旋转,您必须更新相机的位置以使其在 ICRF 帧中保持静止,而不是默认的固定帧。

Camera Sandcastle Demo 有一个活生生的例子。单击下拉列表并从列表中选择View in ICRF。此代码从左侧实时编辑窗口的第 119 行开始:

function icrf(scene, time) {
    if (scene.mode !== Cesium.SceneMode.SCENE3D) {
        return;
    }

    var icrfToFixed = Cesium.Transforms.computeIcrfToFixedMatrix(time);
    if (Cesium.defined(icrfToFixed)) {
        var camera = viewer.camera;
        var offset = Cesium.Cartesian3.clone(camera.position);
        var transform = Cesium.Matrix4.fromRotationTranslation(icrfToFixed);
        camera.lookAtTransform(transform, offset);
    }
}

viewer.scene.postUpdate.addEventListener(icrf);

这段代码只是随着时间的推移更新相机的位置,这样相机在带有星星和卫星轨道的 ICRF 框架中看起来是静止的,而地球本身显示在旋转。

【讨论】:

  • 很好的答案!欣赏!
  • icrf() 功能在启用时设置新的相机视图。如果我通过复选框启用/禁用,它也会更改相机视图。这也与viewer.flyTo() 冲突。我该如何解决这个问题?
猜你喜欢
  • 2014-03-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多