PyEphem:如何测试 object 是否高于 horizon?

PyEphem: How to test if an object is above the horizon?

我正在编写一个 Python 脚本,它提供所有行星、太阳和月亮的基本数据。我的第一个函数将行星分为 horizon 上方的行星和尚未升起的行星:

planets = {
    'mercury': ephem.Mercury(),
    'venus': ephem.Venus(),
    'mars': ephem.Mars(),
    'jupiter': ephem.Jupiter(),
    'saturn': ephem.Saturn(),
    'uranus': ephem.Uranus(),
    'neptune': ephem.Neptune()
}

def findVisiblePlanets(obs):
    visiblePlanets = dict()
    notVisiblePlanets = dict()
    for obj in planets:
        planets[obj].compute(obs)
        if planets[obj].alt > 0:
            visiblePlanets[obj] = planets[obj]
        else:
            notVisiblePlanets[obj] = planets[obj] 
    return (visiblePlanets, notVisiblePlanets)

这没问题,我从 findVisiblePlanets 收到的元组对应于给定 'obs' 的实际天空。

但是在另一个函数中,我需要测试每个行星的高度。如果大于 0,则脚本显示 'setting at xxx',如果小于 0,则脚本显示 'rising at xxx'。这是代码:

if bodies[obj].alt > 0:
    print(' Sets at', setTime.strftime('%H:%M:%S'), deltaSet)
else:
    print(' Rises at', riseTime.strftime('%H:%M:%S'), deltaRise)

所以我使用了完全相同的条件,只是这次它不起作用。我确定我在 bodies[obj] 后面有正确的 object,因为脚本会显示名称、星等、距离等。但由于某种原因,高度 (.alt) 始终低于 0,因此脚本仅显示上升时间。

我尝试了 print(bodies[obj].alt),但我收到了一个负数,形式为“-0:00:07.8”(示例)。我尝试使用 int(bodies[obj].alt) 进行比较,但最终结果为 0。如何测试高度是否为负?我在这里遗漏了什么明显的东西吗?

感谢您的帮助。

我想我曾经遇到过类似的问题。我的理解是,当您在 object 上调用 nextrising() 或 nextsetting() 时,pyephem 会转发您的观察者的时间。它以某种方式看起来,在哪个时间点 object 是 above/below 第一次 horizont。如果您随后调用 bodie.alt 它将始终是这一点 below/above horizon.

你必须以某种方式存储你的观察者时间,并在计算 setting/rising 次后重新设置它。