PyEphem中Observer()的结果似乎未考虑高度影响
我有一个关于PyEphem模块的问题,主要是关于Observer()查询和高度对结果的影响。我从一些来源了解到(比如这个链接),观察者的高度对日落时间有明显的影响。但是在我写的以下代码中,我几乎没有看到什么区别:
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,但我尝试了很多不同的方法,结果还是一样。有没有人知道我哪里出错了?
我已经在这个网站上发过这个问题,但还没有得到回复。我希望我没有根本上误解了高度函数的用途……
1 个回答
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()
!)