我正在使用Cesium Earth开发一个卫星跟踪应用程序。
现在,卫星坐标在地球固定系统中,它工作正常。
但是,我也需要在ECI坐标系中展示它们,为此我必须使地球自转。
怎么做?
发布于 2018-06-04 15:23:41
我首先要提到的是,铯通常使用ICRF这个名字作为ECI的同义词或替代物,所以如果您正在搜索文档,那么查找ICRF会更幸运。
CZML沙堡演示显示了一些在地球轨道上运行的卫星,路径显示在惯性框架中。这是在CZML文件中完成,做了两件事:
"referenceFrame":"INERTIAL"部分中设置值positionposition值本身必须用惯性表示,而不是固定帧。你可以看出路径是惯性的,因为它是一个椭圆。如果它出现在地球上--固定的话,它看起来就像一个螺旋,绕着地球疯狂地循环。随着时间的推移,轨道椭圆当然应该与恒星保持在惯性系中,而不是固定在地球上任何一个陆地之上。
但是,我也需要在ECI坐标系中展示它们,为此我必须使地球自转。
这是两个不同的问题。在铯中,地球的固定框架已经相对于ICRF框架旋转(内部)。但默认情况下,相机仍停留在地球固定(ECF)中。因此,用户看到地球看起来是静止的,恒星和卫星轨道似乎围绕着地球旋转。这实际上是一种有效的观察系统的方法,就像摄像机被卡在一个很高的杆子上,连接在地球上,横扫不同的轨道。
为了使地球在屏幕上随着时间的推移在屏幕上旋转,你必须更新相机的位置以保持它在ICRF帧中的静止,而不是默认的固定帧。
相机沙堡演示有一个活生生的例子。单击下拉列表并从列表中选择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框架中似乎是静止的,有恒星和卫星轨道,而地球本身也被显示为旋转。
https://stackoverflow.com/questions/50682925
复制相似问题