计算日出结束/日落开始

时间:2016-05-05 10:04:24

标签: pyephem

在PyEphem中,我可以计算出日出时间。没问题。我想要的是:太阳的底部何时与地平线分开?一个明显但不正确的方法是当太阳的中心位于1/2 *(太阳大小,以度为单位)时。由于大气的影响,这是远离的。

日落的同样问题。太阳的底部何时触及地平线?

这是否有标准修正?与为sunrise / set设置地平线为-34 arcminutes相同?

2 个答案:

答案 0 :(得分:2)

The PyEphem page for Rising, Transit, Setting 建议为了匹配USNO的太阳升起的年历数据, 你可以关闭折射(通过设置气压为零) 并将地平线降低34分钟,低于正常范围:

>>> import ephem
>>> atlanta = ephem.Observer()
>>> atlanta.pressure = 0
>>> atlanta.horizon = '-0:34'
>>> atlanta.lat, atlanta.lon = '33.8', '-84.4'
>>> atlanta.date = '2009/09/06 17:00' # noon EST
>>> print(atlanta.previous_rising(ephem.Sun()))

现在,如果你按照太阳的整个视直径移动地平线 previous_rising将告诉太阳的上肢何时到达 这个视界(假设没有折射),这将发生在什么时候 太阳的下肢到达了34分钟的弧度 正常地平线(再次假设没有折射), 其中(遵循USNO的惯例)是预测的时间 当折射时,太阳的底部将处于正常的地平线 被考虑在内。

请注意,正如标题下所述 技术定义和计算详细信息this page at the USNO site, USNO太阳升起/设定时间告诉太阳的中心 在地平线以下50分钟的弧度,无论实际的明显 那个时候太阳的直径。 实际上,它们假设太阳半径为16分钟 和34分钟的弧度折射。 此外,在小标题上升/设定计算的准确性下, 值得注意的是,即使在理想条件下(例如,海上晴朗的天空),计算上升或设定的时间可能会误差一分钟或更长时间。 由于不可预测的大气条件。 如果你处于更高的纬度,效果会更糟。

鉴于此,可以采取合理的程序 太阳直径为32分钟弧度;然后预测结束 日出而不是开头,你会改变行

>>> atlanta.horizon = '-0:34'

中的PyEphem示例代码

>>> atlanta.horizon = '-0:02'

答案 1 :(得分:1)

我有一个似乎有效的近似解决方案。 如果有人知道更优雅的解决方案。请说出来。

日出时:太阳的中心位于约。 -34' - (太阳直径)/ 2。             太阳的顶部似乎在地平线上。 假设-34'校正在地平线附近是恒定的。 (一个很大的假设)

当太阳向上移动1个太阳直径时,太阳的底部将在地平线上。

今天上午:

    time_of_sunrise = obs.previous_rising(ephem.Sun(), ephem.now())
    obs.date = time_of_sunrise
    sun.compute(obs)
    angle_sun_center_sunrise = sun.alt / degree ( about -0.84' )
    sun_dia_at_sunrise = sun.size / 3600

使用二分搜索查找日出结束。伪代码:

    adjTm = 6 minutes
    sunriseEnd = time_of_sunrise + adjTm
    obs.date = sunriseEnd
    sun.compute(obs)

检查sun.alt是否在X公差范围内(angle_sun_center_sunrise + sun_dia_at_sunrise)

If out of tol.:
    set adjTm = adjTm/2
    adjust obs.date by sunriseEnd +/- adjTm
repeat until within tolerance.

Sunset的工作方式相同。

相关问题