在PyEphem中,我可以计算日出时间。没问题。我想要的是:什么时候太阳的底部从地平线上分离出来?一种明显但不正确的方法是当太阳的中心位于1/2 *(太阳大小以度为单位)时。由于大气的影响,这是很不靠谱的。
日落也有同样的问题。什么时候太阳的底部接触到地平线?
对此有标准的修正吗?与将日出/日落的地平线设置为-34角分钟相同吗?
发布于 2016-05-12 02:33:14
The PyEphem page for Rising, Transit, Setting建议,为了与美国气象局的太阳升起年历数据相匹配,你可以关闭折射(通过将气压设置为零),并将地平线设置为低于正常水平的弧线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分钟弧线时,太阳的USNO rise/set time就会告诉我们,而不考虑当时太阳的实际视直径。实际上,他们假设太阳半径为16分钟的弧线,折射为34分钟的弧线。此外,在“Accuracy of rise/set computations”副标题下指出,由于不可预测的大气条件,“即使在理想条件下(例如,海上晴朗的天空),计算的上升或set时间可能会有一分钟或更长的误差”。如果你在更高的纬度,效果会变得更糟。
有鉴于此,一个合理的程序可能是假设太阳直径为32分钟的弧线;然后要预测日出的结束而不是开始,您可以更改这条线
>>> atlanta.horizon = '-0:34'
在PyEphem示例代码中
>>> atlanta.horizon = '-0:02'
发布于 2016-05-12 01:35:54
我有一个似乎可行的近似解决方案。如果有人知道更优雅的解决方案的话。请大声点。
日出时:太阳的中心大约在。-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.
日落也是如此。
https://stackoverflow.com/questions/37047725
复制相似问题