Python 用PyEphem计算黎明和日落时间

Python 用PyEphem计算黎明和日落时间,python,astronomy,pyephem,Python,Astronomy,Pyephem,是否可以使用以下公式计算黎明、黄昏和日落时间?我曾使用Pyphem生成白天和夜间时间,但在日落/黄昏/黎明时我没有发现任何东西您可以尝试根据黄昏/黎明的不同定义设置地平线参数。有关黎明和黄昏,请参见 简而言之,黎明和黄昏表示太阳中心位于地平线以下特定角度的时间;用于此计算的角度因“民用”、航海(航海)和天文微光(分别使用6度、12度和18度)的定义而异 相反,日出对应于太阳边缘在地平线(0度)上方/下方出现(或消失,如日落)的时间。因此,每个人、平民、水手和天文爱好者都会得到相同的上升/下降时间

是否可以使用以下公式计算黎明、黄昏和日落时间?我曾使用Pyphem生成白天和夜间时间,但在日落/黄昏/黎明时我没有发现任何东西

您可以尝试根据黄昏/黎明的不同定义设置
地平线
参数。

有关黎明和黄昏,请参见
简而言之,黎明和黄昏表示太阳中心位于地平线以下特定角度的时间;用于此计算的角度因“民用”、航海(航海)和天文微光(分别使用6度、12度和18度)的定义而异

相反,日出对应于太阳边缘在地平线(0度)上方/下方出现(或消失,如日落)的时间。因此,每个人、平民、水手和天文爱好者都会得到相同的上升/下降时间。(见附件)

总而言之,一旦一个
pyephem.观测者正确参数化(设置其纬度、长度、日期、时间、压力(?高度?)等),就可以从
Observer.previous\u rising()
Observer.next\u setting()
方法,
由此 第一个参数是
ephem.Sun()

对于暮光计算,需要将
use\u center=
参数设置为
True
,并且

地平线为0(如果考虑大气折射,则为0:34)或-6、-12或-18。

以下脚本将使用PyEphem计算日出、日落和黄昏时间。评论应足以解释每个部分正在做什么

import ephem

#Make an observer
fred      = ephem.Observer()

#PyEphem takes and returns only UTC times. 15:00 is noon in Fredericton
fred.date = "2013-09-04 15:00:00"

#Location of Fredericton, Canada
fred.lon  = str(-66.666667) #Note that lon should be in string format
fred.lat  = str(45.95)      #Note that lat should be in string format

#Elevation of Fredericton, Canada, in metres
fred.elev = 20

#To get U.S. Naval Astronomical Almanac values, use these settings
fred.pressure= 0
fred.horizon = '-0:34'

sunrise=fred.previous_rising(ephem.Sun()) #Sunrise
noon   =fred.next_transit   (ephem.Sun(), start=sunrise) #Solar noon
sunset =fred.next_setting   (ephem.Sun()) #Sunset

#We relocate the horizon to get twilight times
fred.horizon = '-6' #-6=civil twilight, -12=nautical, -18=astronomical
beg_twilight=fred.previous_rising(ephem.Sun(), use_center=True) #Begin civil twilight
end_twilight=fred.next_setting   (ephem.Sun(), use_center=True) #End civil twilight
重新定位地平线可以解释光线围绕地球曲率折射的原因。PyEphem有能力在给定温度和压力的情况下更精确地计算出这一点,但美国海军天文年鉴更倾向于忽略大气而只是重新定位地平线。我在这里引用USNAA是因为它是一个权威的来源,可以根据它来检查这些类型的计算。您还可以在上查看答案

请注意,PyEphem会及时获取并返回值。这意味着您必须将本地时间转换为UTC,然后再将UTC转换回本地时间,以找到您可能正在寻找的答案。在我写这个答案的那天,加拿大弗雷德里克顿比UTC晚了3个小时

为了好玩,我还加入了太阳正午的计算。请注意,这比您预期的时间多了一个小时——这是我们使用夏令时的一个副作用

所有这些都返回:

begin civil twilight: 2013/9/4 09:20:46
sunrise:              2013/9/4 09:51:25
noon:                 2013/9/4 16:25:33
sunset:               2013/9/4 22:58:49
end civil twilight:   2013/9/4 23:29:22
请注意,我们必须减去3小时才能将它们转换为ADT时区

Pypephem文档页面包含了上面的大部分内容,尽管我试图澄清我发现的混淆点,并在StackOverflow上包含该链接的重要部分