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

我相当确定我做错了什么而不是这是一个错误,但是尝试了许多不同的方法后,恐怕我总是会得到相同的结果。有谁知道我在这里做错了什么?

我已经在https://launchpad.net/pyephem上发布了这个,但我没有任何回应。我希望我没有从根本上误解了高程函数的目的......

4

1 回答 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()!)

于 2011-10-27T08:15:19.813 回答