使用天空场的 ECEF 到 J2000
ECEF to J2000 using skyfield
假设我有 (ECEF) 某个物体在特定时间到地球的纬度、经度和距离。我需要得到它的 J2000 坐标。
我正在做的是
import skyfield.api
planets = skyfield.api.load('de421.bsp')
earth = planets['earth']
ts = skyfield.api.load.timescale()
sat = earth + skyfield.api.Topos(latitude_degrees=latitude, longitude_degrees=longitude)
obs = earth.at(ts.utc(time)).observe(sat)
x, y, z = obs.km
然后,我会将 [x, y, z]
归一化并乘以到地球的距离。
涉及两个问题:
- 这样做正确吗?
- 有没有更快的不加载方法'de421.bsp'?
结果应该是准确的,但确实有更简单的方法——你应该问的预感在这里确实是正确的!尝试阅读地球卫星文档的“生成卫星位置”部分:
http://rhodesmill.org/skyfield/earth-satellites.html#generating-a-satellite-position
我想你会发现你可以做这样的事情来达到相同的结果:
sat = skyfield.api.Topos(latitude_degrees=latitude, longitude_degrees=longitude)
x, y, z = sat.at(ts.utc(time)).position.km
但我不确定您的代码的确切外观,因为我在您的代码中的任何地方都看不到您所说的到地球的距离,并且您的代码引用了一个 sa
变量没有以其他方式使用(也许你的意思是 sat
?)——但希望文档能让你感动!
假设我有 (ECEF) 某个物体在特定时间到地球的纬度、经度和距离。我需要得到它的 J2000 坐标。 我正在做的是
import skyfield.api
planets = skyfield.api.load('de421.bsp')
earth = planets['earth']
ts = skyfield.api.load.timescale()
sat = earth + skyfield.api.Topos(latitude_degrees=latitude, longitude_degrees=longitude)
obs = earth.at(ts.utc(time)).observe(sat)
x, y, z = obs.km
然后,我会将 [x, y, z]
归一化并乘以到地球的距离。
涉及两个问题:
- 这样做正确吗?
- 有没有更快的不加载方法'de421.bsp'?
结果应该是准确的,但确实有更简单的方法——你应该问的预感在这里确实是正确的!尝试阅读地球卫星文档的“生成卫星位置”部分:
http://rhodesmill.org/skyfield/earth-satellites.html#generating-a-satellite-position
我想你会发现你可以做这样的事情来达到相同的结果:
sat = skyfield.api.Topos(latitude_degrees=latitude, longitude_degrees=longitude)
x, y, z = sat.at(ts.utc(time)).position.km
但我不确定您的代码的确切外观,因为我在您的代码中的任何地方都看不到您所说的到地球的距离,并且您的代码引用了一个 sa
变量没有以其他方式使用(也许你的意思是 sat
?)——但希望文档能让你感动!