2011-10-05 59 views
9

我对PyEphem模块给出的有关Observer()查询的结果以及海拔效果有一个查询。我从几个来源(如http://curious.astro.cornell.edu/question.php?number=388)了解到,观察者的海拔高度对日落时间有显着影响。然而,在下面的代码,我看到旁边没有区别:Observer()的结果似乎没有考虑到PyEphem中的海拔效应

import ephem 

emphemObj = ephem.Observer() 
emphemObj.date = '2011/08/09' 
emphemObj.lat = '53.4167' 
emphemObj.long = '-3' 
emphemObj.elevation = 0 

ephemResult = ephem.Sun() 
ephemResult.compute(emphemObj) 
print "Sunset time @ 0m: " + str(emphemObj.previous_rising(ephemResult)) 

emphemObj.elevation = 10000 
ephemResult.compute(emphemObj) 
print "Sunset time @ 10000m: " + str(emphemObj.previous_rising(ephemResult)) 

我得到的输出:

Sunset time @ 0m: 2011/8/8 04:38:34 
Sunset time @ 10000m: 2011/8/8 04:38:34 

我确信我做错了什么,而不是这是一个错误,但已经尝试了许多不同的方式,恐怕我会继续收到相同的结果。有谁知道我在这里做错了吗?

我已经在https://launchpad.net/pyephem上发布了,但是我没有回应。我希望我没有从根本上误解海拔函数的目的...

+0

如果您链接的文章中复制的例子,在赤道为12000米,你会得到相同的结果呢?如果是这样,那么他们可能还没有实现高程问题。 – wberry

+0

我不是100%肯定我已经尝试过12,000米,但我肯定尝试了其他(更多)更高的值。 previous_rising报告的时间确实发生了变化,这导致我认为高程代码正在做某些事情。我只是希望它不是仅仅考虑大气折射而不是“视界”效应。 – Smingos

回答

6

观察者的elevation意味着海拔高度的位置 - 例如亚利桑那州弗拉格斯塔夫的海拔高度。但可以推测,不仅观测者及其望远镜或双筒望远镜是海拔这一距离,假定在这个高度上地面以及地平线是也是。所以增加的elevation相对于地平线没有任何优势,因为当你移动到更高海拔的城市时,地平线会随着你移动。

用铅笔和纸黄色垫几分钟后,它看起来像角降到地平线hza是关系到地球半径r和你的距地面高度h如上如下:

hza = - acos(r/(h + r)) 

所以从你上面的例子以下的:

import math 
height = 10000 
hza = - math.acos(ephem.earth_radius/(height + ephem.earth_radius)) 
emphemObj.horizon = hza 
print "Sunrise time @ 10000m: " + str(emphemObj.previous_rising(ephemResult)) 

我得到的输出:

Sunrise time @ 10000m: 2011/8/8 04:08:18 

(请注意,“日出”去与previous_rising()和“日落”去与next_setting()!)

+0

谢谢布兰登!我花了很多时间试图找出问题所在,我并没有停下来想它是否真的有问题。当我考虑它时是有意义的......尽管如此,上面的计算无疑会对我有用,因为当地有显着的突出表现。 – Smingos

+0

哦,亲爱的,我只是注意到我已经把日期时间标记为previous_rising了! :-)很高兴那个没有把它变成实际的代码! – Smingos