ECEF到J2000使用skyfield

时间:2017-07-11 13:27:36

标签: python 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'?

1 个答案:

答案 0 :(得分:1)

结果应该是准确的,但确实有一种更简单的方法 - 你应该问的预感在这里确实是正确的!尝试阅读地球卫星文档的“生成卫星位置”部分:

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?) - 但希望文档会让你感动!