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

时间:2010-04-14 12:29:18

标签: python astronomy pyephem

是否可以使用PyEphem计算黎明,黄昏和日落时间?我用PyEphem制作白天和黑夜时间,但我没有在日落/黄昏/黎明时发现任何东西

3 个答案:

答案 0 :(得分:24)

以下脚本将使用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,因为它是一个权威来源,可以检查这些类型的计算。您还可以在NOAA's website上查看答案。

请注意,PyEphem在UTC时间内获取并返回值。这意味着您必须将本地时间转换为UTC,然后将UTC转换回本地时间以找到您可能正在寻找的答案。在我写这个答案的那天,加拿大的弗雷德里克顿在ADT timezone中落后于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时区。

This PyEphem文档页面包含了上述大部分内容,不过我已经尝试澄清了我发现令人困惑的观点,并在StackOverflow中包含了该链接的重要部分。

答案 1 :(得分:14)

对于 黎明和黄昏 ,请参阅pyephem documentation regarding twilight
简而言之,黎明和黄昏表示太阳的中心处于地平线以下的特定角度的时间;用于此计算的角度因“平民”,导航(航海)和天文双重的定义而异,分别使用6度,12度和18度。

相反, sunrise 对应于太阳的边缘出现(或日落时消失)正好在上方/下方的时间地平线(0度)。因此,每个人,平民,水手和天文爱好者都会获得相同的上升/设定时间。 (见Naval Observatory risings and settings in pyephem documentation)。

总结,一旦正确地对pyephem.Observer进行参数设置(设置其纬度,长度,日期,时间,压力(?为高度?)等),各种暮光之城时间(黎明,黄昏)和日出和日落时间从中获得  Observer.previous_rising()Observer.next_setting()方法,
  因此   第一个参数是ephem.Sun()
  对于黄昏计算,use_center=参数需要设置为True,并且   地平线要么为0(如果考虑到大气的折射,则为0:34)或-6,-12或-18。

答案 2 :(得分:4)

您可以尝试根据黄昏/黎明的不同定义设置horizon参数below the horizon