我正在编写一个Python脚本,为所有行星,太阳和月亮提供基本数据。我的第一个功能是将行星划分为高于地平线的行星和那些尚未升起的行星:
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,则脚本显示“在xxx处设置”,如果它在0以下,则脚本显示“在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)
所以我使用完全相同的条件,除了这次它不起作用。我确信我在body [obj]后面有正确的对象,因为脚本显示名称,幅度,距离等。但由于某种原因,海拔高度(.alt)始终低于0,所以脚本只显示上升时间。
我尝试了print(body [obj] .alt),我收到了'-0:00:07.8'(示例)形式的负数。我尝试使用int(bodies [obj] .alt)进行比较,但最终得到0.我如何测试海拔高度是否为负值?我错过了一些明显的东西吗?
感谢您的帮助。
答案 0 :(得分:1)
我想我曾经遇到过类似的问题。当我在一个物体上调用nextrising()或nextsetting()时,我的理解是pyephem转发观察者的时间。它以某种方式看起来,第一次物体位于地平线上方/下方的时间点。如果你再打电话给bodie.alt,那么它总是会低于/高于地平线。
您必须以某种方式存储您的观察者时间,并在计算设置/上升时间后再次设置它。