首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >铯地球:在ECI坐标系中显示卫星

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

Stack Overflow用户
提问于 2018-06-04 14:30:09
回答 1查看 2.3K关注 0票数 3

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

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

但是,我也需要在ECI坐标系中展示它们,为此我必须使地球自转。

怎么做?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-04 15:23:41

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

CZML沙堡演示显示了一些在地球轨道上运行的卫星,路径显示在惯性框架中。这是在CZML文件中完成,做了两件事:

  • "referenceFrame":"INERTIAL"部分中设置值position
  • 所有实际的position值本身必须用惯性表示,而不是固定帧。

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

但是,我也需要在ECI坐标系中展示它们,为此我必须使地球自转。

这是两个不同的问题。在铯中,地球的固定框架已经相对于ICRF框架旋转(内部)。但默认情况下,相机仍停留在地球固定(ECF)中。因此,用户看到地球看起来是静止的,恒星和卫星轨道似乎围绕着地球旋转。这实际上是一种有效的观察系统的方法,就像摄像机被卡在一个很高的杆子上,连接在地球上,横扫不同的轨道。

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

相机沙堡演示有一个活生生的例子。单击下拉列表并从列表中选择View in ICRF。这方面的代码开始于左侧实时编辑窗口中的第119行:

代码语言:javascript
复制
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框架中似乎是静止的,有恒星和卫星轨道,而地球本身也被显示为旋转。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50682925

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档