1

假设我在某个时间有一个物体的(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'?
4

1 回答 1

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? ) — 但希望文档能让你动起来!

于 2017-07-12T03:05:54.910 回答