使用天空场的 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] 归一化并乘以到地球的距离。 涉及两个问题:

  1. 这样做正确吗?
  2. 有没有更快的不加载方法'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?)——但希望文档能让你感动!