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 次后重新设置它。
我正在编写一个 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 次后重新设置它。