PyEphem中Observer()的结果似乎没有考虑高程影响。

9

我对PyEphem模块中与Observer()查询相关的结果以及高度的影响有疑问。我从一些来源(例如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

我相信我做错了什么,而不是这是一个bug,但尝试了许多不同的方式后,恐怕我仍然得到相同的结果。有人知道我在这里做错了什么吗?
我已经在https://launchpad.net/pyephem上发布过了,但没有任何回应。我希望我没有根本误解仰角函数的目的...

如果您复制链接文章中的示例,在赤道海拔12000米处,会得到相同的结果吗? 如果是这样,那么可能他们还没有考虑高度问题。 - wberry
我不确定我尝试过12000米,但我肯定尝试过其他(更高)的值。previous_rising报告的时间确实会改变,这让我相信海拔代码正在做某些事情。我只是希望它不仅仅考虑了大气折射而没有考虑“地平线”效应。 - Smingos
1个回答

6
观察者的高度是指他们的位置相对于海平面的高度,例如亚利桑那州弗拉格斯塔夫的高度。但是假设观察者和他们的望远镜或双筒望远镜不仅在这个高度上;地面 - 因此地平线 - 也在这个高度上。因此,增加高度并不能使您相对于地平线处于优势地位,因为当您移动到一个更高的城市时,地平线会随着您的移动而移动。
在用铅笔和黄色便笺纸进行几分钟的计算后,看起来向地平线的角度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()配对!)

谢谢Brandon!我花了很多时间试图找出问题所在,我没有停下来想一想它是否真的是一个问题。当我想到这一点时,这是有意义的...不过,上面的计算对我来说肯定会在存在显著地方的时候非常有用。 - Smingos
哦,亲爱的,我才注意到我把 previous_rising 标记为日落时间了! :-) 很高兴这个错误没有出现在实际代码中! - Smingos

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接