javascript - 铯土 : Show satellites in ECI coordinate system

标签 javascript cesiumjs

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

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

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

怎么做?

最佳答案

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

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

  • position部分设置值"referenceFrame":"INERTIAL"
  • 所有实际位置 值本身都必须以惯性而非固定坐标系表示。

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

However, I need to show them also in ECI coordinate frame and for that I have to make the Earth rotate.

这是两个不同的问题。在铯中,地球的固定坐标系已经相对于 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 坐标系中看起来是静止的,有恒星和卫星轨道,而地球本身在旋转。

关于javascript - 铯土 : Show satellites in ECI coordinate system,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50682925/

相关文章:

javascript - 在 Angular 8 模板驱动表单中单击 "clear"按钮时如何清除文本字段?

javascript - 使用组合的 Build/Cesium.js 而不是单独的 .js 文件

events - 等待场景在铯中完全渲染

javascript - 从脚本外部调用内部Cesium函数

javascript - 来自 JSON 的 CSS 样式

javascript - 是否可以在 JavaScript 中访问事件队列?

javascript - 我想在铯查看器中使用折线创建直线箭头。我使用的是火狐40.0

cesiumjs - 如何在 CesiumJS 中的两个实体之间创建一条移动线?

javascript - jQuery |如何从其他html中获取iframe的属性?

javascript - openlayers - 我如何旋转图像层