2017-07-11 113 views
-2

该脚本应该获取通过时间,获取通行时间的角度,然后获取到达角度的时间。我给出的两份印刷说明应该给出相同的结果。PyEphem:从太阳时间计算角度,然后从角度计算时间的时间不匹配

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

+0

请分享您使用的实际代码。错误消息引用第15行。您打印变量'transTime',但不会初始化它。这与生成错误的代码不同。 –

+0

@DarenThomas你可以看看我过去的编辑。为了使它更具可读性,我缩短了一点,但本质上它是相同的。 – Goldname

+1

您的缩写使其“更具可读性”使您的代码无法正常工作,并且您显示的错误消息不适用于此代码,即可能会让人们试图帮助您。失败。 – barny

回答

0

第一:跟着看起来是先前的讨论,你似乎已经编辑好这个问题的问题到良好的形状。我可以将它粘贴到一个文件中并运行它并获得相同的错误。

第二:问题可能是您正在寻找称为“密切”的情况,使用求解器来设计,而不是找到直交。像next_setting()这样的程序期望在一天中的某个时刻发现太阳高于地平线,然后一段时间低于地平线,然后在发生转变的确切时刻缩小。但是,如果我正确地读取了你的代码,并且给定了这个设置,那么永远不会有太阳出现的时刻“向上”,因为它不会高于(或多或少)在过境时高于地平线的高度。换句话说,当你设定远处天空的地平线时,换句话说,你创建PyEphem看起来像没有日出的日子,所以它明智地向你报告它无法找到日落。

你说你的目标是“得到角度达到的时间” - 但不是transit_time本身?我不确定我明白为什么transit_time还不是您正在寻找的时间。

+0

感谢您的回复。我有一个函数可以计算基于角度输入的时间。剧本的主体以一个角度来计算太阳达到那个角度的时间。如果角度超出了太阳的范围,它使用最大高度的时间(从transit_time计算)作为输入,这就是为什么我需要从时间 - >角度 - >时间 – Goldname