首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用PyEphem计算黎明和日落时间

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

Stack Overflow用户
提问于 2010-04-14 20:29:18
回答 3查看 13.4K关注 0票数 17

可以使用PyEphem计算黎明、黄昏和日落时间吗?我已经使用PyEphem生成了白天和晚上的时间,但是我没有找到关于日落/黄昏/黎明的任何东西

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-04-14 20:49:31

有关黎明和黄昏,请参阅

简而言之,黎明和黄昏表示太阳中心处于低于地平线的特定角度的时间;用于计算的角度因“民用”、导航(航海)和天文黄昏的定义而有所不同,分别使用6度、12度和18度。

与之相对的是,日出对应于太阳边缘出现(或消失,对于日落)恰好在地平线上方/下方(0度)的时间。因此,每个人,平民,水手和天文爱好者都有相同的上升/设定时间。(参见 in pyephem documentation)。

总结,一旦正确地对pyephem.Observer进行了参数化(设置其date、long、date、time、pressure (?对于海拔高度?)等),各种黎明时间(黎明、黄昏)以及日出和日落时间从

Observer.previous_rising()Observer.next_setting()方法,

因此,第一个参数是ephem.Sun()

*对于黄昏计算,use_center=参数需要设置为True,以及

地平线要么是0(如果考虑到大气折射,就是0:34 ),要么是-6,-12或-18。

票数 16
EN

Stack Overflow用户

发布于 2013-09-05 04:13:18

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

代码语言:javascript
运行
复制
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中落后于协调世界时3个小时。

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

所有这些都会返回:

代码语言:javascript
运行
复制
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上包含了该链接的重要部分。

票数 29
EN

Stack Overflow用户

发布于 2010-04-14 20:46:17

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

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2637293

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档