【问题标题】:Position of observer (lat/lon)观察者的位置(纬度/经度)
【发布时间】:2018-01-03 12:44:58
【问题描述】:

我正在玩弄 pyephem 和 jplephem,但我似乎无法弄清楚如何使用这些软件包及时跟踪观察者的路径(或给定的纬度/经度/日期)。我想做的是记录地球上提供的纬度/经度/日期相对于太阳的位置(x,y,x)。想象一下地球表面上的示踪剂产生的路径 w.r.t.太阳。

有没有办法在给定时间轻松获得地球表面上一点相对于地球质心的位置?

提前致谢。

【问题讨论】:

  • 您可以从 JPLEphem 获取地球的位置和太阳的位置。您还可以获得地球的详细自转、进动和章动。现在求解给定时间您首选的椭球体(或大地水准面)与地球-太阳矢量的交点。
  • 话虽如此,这个问题对于 SO 来说太宽泛了。如果您在尝试中遇到特定的编码问题,我很乐意提供帮助。

标签: python-3.x pyephem


【解决方案1】:

PyEphem 库构建在名为 libastro 的天文学库之上,唉,它不提供对其底层向量的访问。而 jplephem 对太阳系中行星的位置一无所知。

但是 jplephem 为之编写的 Skyfield 天文学库,两者兼而有之。以下是您如何找出地球位置相对于太阳的 x、y、z 位置:

from skyfield.api import load, Topos

# Let's consider 72 hours starting at midnight UTC on January 2.

duration_hours = 72

ts = load.timescale()
t = ts.utc(2018, 1, 2, range(duration_hours))

# Load a planetary ephemeris.

planets = load('de421.bsp')
earth, sun = planets['earth'], planets['sun']

# Print where the US Naval Observatory was each hour relative to the Sun.

usno = Topos('38.9215 N', '77.0669 W', elevation_m=92.0)
result = sun.at(t).observe(earth + usno)
for time, position_au in zip(t, result.position.au.T):
    print(time.utc_jpl(), position_au)

生成的行如下所示:

A.D. 2018-Jan-04 21:00:00.0000 UT [-0.24130305  0.87456403  0.37915831]
A.D. 2018-Jan-04 22:00:00.0000 UT [-0.2420075   0.87440863  0.37908723]
A.D. 2018-Jan-04 23:00:00.0000 UT [-0.24271409  0.87425296  0.37901595]

这是 Skyfield 的主页:

http://rhodesmill.org/skyfield/

【讨论】:

  • 哇,这非常简单。非常感谢,布兰登!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多