我想更具体地说明我想做什么。我在 ECI 中获取坐标,并且需要从中获取纬度和经度。我能怎么做?我正在寻找,但找不到任何相关信息。再次感谢。
(我正在用java编写一个小程序,显示给定时间内卫星的位置。所以,我使用了NORAD SGP算法,并且我有位置(x,y,z)和速度(Vx,Vy) ,Vz)。但是根据我读到的内容,该算法使用的坐标系是 ECI。现在我需要在地图中绘制卫星,但我认为无法将此坐标转换为可以帮助我的系统。如果我可以将其转换为经度和纬度,那么我该怎么做?谢谢。)
您要做的称为 ECI/ECEF(笛卡尔)到大地测量(纬度/经度)的转换。 这种转换是所有大地测量转换中最复杂的,因为封闭形式解很复杂。 有关坐标系的讨论,请参阅 Stevens 和 Lewis 的《飞机控制与模拟》第 34 页:http://books.google.com/books/about/Aircraft_control_and_simulation.html?id=T0Ux6av4btIC
ECI 到大地测量是一个两步过程:
第一步是最简单的,您需要将 ECI(地心惯性)转换为 ECEF(地心/地固定)。
第二步是将 ECEF 转换为大地测量。 您可以在这里阅读有关通过 Newton-Ralphson 解决此问题的信息:http://en.wikipedia.org/wiki/Geodetic_system
但是,如果我没记错的话,牛顿-拉夫森在极点附近会变得不稳定。 封闭式解决方案要复杂得多。 我已经成功地实施了朱老师的方法。 封闭式解决方案的优点是无需迭代且不存在奇点(技术上存在奇点,但不在地球上方)。 参考文献:J.朱.将地心地球固定坐标转换为大地坐标。技术报告 IEEE 日志号T-AES/30/3/1666,IEEE,1993 年 12 月。
Python 的 PyMap3D 库 具有 eci2ecef 和 ecef2geodetic 函数。 它们默认与 Astropy 交互并且非常好,这要归功于 Michael Hirsch(SciVision - 他接受捐赠)的辛勤工作。
当然,您需要知道观察 ECI 坐标的时间;否则,您无法将它们转换为 ECEF。 我建议不使用更简单的eci2geodetic函数,除非不需要高精度和准确度;它会稍微快一些,因为它没有考虑地球的章动等)。
对于任何在 Python 中实现 PyMap3D 库遇到困难的人,这里有一个简单的 ECI 到大地测量转换示例,发生于 2000 年 1 月 1 日。
# eci x, y, z in meters
eci_x = 4042209.16234488
eci_y = 3887386.439676979
eci_z = 3027820.911383752
# January 1st 2000 UTC
time = datetime.datetime(2000, 1, 1, tzinfo=datetime.timezone.utc)
lat, lon, alt = pymap3d.eci2geodetic(eci_x, eci_y, eci_z, time)