PyEphem:从太阳时间计算角度然后从角度计算时间时的时间不匹配

PyEphem: Time mismatch when calculating angle from time of the sun and then time from angle

这个脚本是先获取通过时间,获取通过时间的角度,再获取到达角度的时间。我给出的两个打印语句应该给出等效的输出。

import ephem
obs = ephem.Observer()
obs.lat = '30'
obs.long = '30'
sun = ephem.Sun(obs)
obs.date = sun.transit_time

sun.compute(obs)
altitude = sun.alt
obs.horizon = altitude
print(obs.next_setting(ephem.Sun(), use_center = True))

相反,这给了我一个 NeverUpError。那没有任何意义。我尝试使用坐标 20,20。它没有给出错误,但时间不匹配。

Traceback (most recent call last): File "test.py", line 11, in print(obs.next_setting(ephem.Sun(), use_center = True)) File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/ephem/init.py", line 498, in next_setting return self._riset_helper(body, start, use_center, False, False) File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/ephem/init.py", line 466, in _riset_helper d0 = visit_transit() File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/ephem/init.py", line 410, in visit_transit % (body.name, d)) ephem.NeverUpError: 'Sun' transits below the horizon at 2017/7/12 10:05:39

首先:在之前的讨论之后,您似乎已经将问题编辑得很好。我可以将它粘贴到一个文件中并 运行 它并得到相同的错误。

第二:问题可能是您正在使用旨在寻找直交点的求解器来搜索称为“密切”的情况。像 next_setting() 这样的例程期望发现一天中的某个时间太阳在 horizon 上方,然后一段时间后在 horizon 下方,然后它在确切的位置缩小转变发生的时刻。但是你正在为它设置的问题是在给定 horizon 的情况下找到下一个设置,该设置与太阳的最大高度一样高,如果我正确阅读你的代码 - 并且给定该设置,永远不会有片刻当太阳“升起”时,因为它永远不会高于(或多于或低于)它在凌日时刻高于 horizon 的高度。当您将 horizon 设置到天空那么高时,换句话说,您创建了 PyEphem 看起来像没有日出的一天,因此它会明智地向您报告它找不到日落。

您说您的目标是“获取达到角度的时间”——但这不就是 transit_time 本身吗?我不确定我是否理解为什么 transit_time 不是您要查找的时间。