我正在查询与Observer()查询有关的PyEphem模块给出的结果,以及高程的影响。我从几个来源(例如http://curious.astro.cornell.edu/question.php?number=388)了解到,观察者的高度对日落时间有显着影响。但是,在下面的代码中,我几乎看不到任何区别:

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上,但是没有任何回应。我希望我没有从根本上误解了标高功能的目的...

最佳答案

观察者的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

(请注意,“sunrise”与previous_rising()一起使用,而“sunset”与next_setting()一起使用!)

关于python - Observer()的结果似乎无法解决PyEphem中的高程影响,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7662543/

10-15 11:11