铯地球:在ECI坐标系中显示卫星

时间:2018-06-04 14:30:09

标签: javascript cesium

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

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

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

怎么做?

1 个答案:

答案 0 :(得分:4)

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

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

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

你可以告诉路径是惯性的,因为它是一个椭圆。如果它是在地球固定的情况下显示的,它看起来就像一个螺旋状,在地球周围疯狂地循环。随着时间的推移,轨道椭圆当然应该与恒星一起保留在惯性框架内,而不是固定在地球上任何一个陆地上方。

  

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

这是两个不同的问题。在铯中,地球的固定帧已经相对于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帧中看起来是静止的,其中有星星和卫星轨道,并且地球本身显示为旋转。