【发布时间】:2016-05-05 10:04:23
【问题描述】:
在 PyEphem 中,我可以计算日出时间。没问题。我想要的是:太阳的底部何时似乎与地平线分开?一种明显但不正确的方法是当太阳中心位于 1/2 *(太阳大小,以度为单位)时。由于大气影响,这离我们很遥远。
日落的同样问题。太阳的底部何时触及地平线?
对此有标准更正吗?与将日出/日落的地平线设置为 -34 角分一样吗?
【问题讨论】:
标签: pyephem
在 PyEphem 中,我可以计算日出时间。没问题。我想要的是:太阳的底部何时似乎与地平线分开?一种明显但不正确的方法是当太阳中心位于 1/2 *(太阳大小,以度为单位)时。由于大气影响,这离我们很遥远。
日落的同样问题。太阳的底部何时触及地平线?
对此有标准更正吗?与将日出/日落的地平线设置为 -34 角分一样吗?
【问题讨论】:
标签: pyephem
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'
【讨论】:
我有一个似乎可行的近似解决方案。 如果有人知道更优雅的解决方案。请大声说出来。
日出时:太阳的中心大约在-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 是否在 (angle_sun_center_sunrise + sun_dia_at_sunrise) 的 X 容差范围内
If out of tol.:
set adjTm = adjTm/2
adjust obs.date by sunriseEnd +/- adjTm
repeat until within tolerance.
日落也是如此。
【讨论】: