计算日出/日落时如何计算观察者的高度?

时间:2017-07-07 08:29:52

标签: equation calculation solar

如何在计算日出/日落时考虑观察者的高度?

计算任何纬度/经度的日出/设置都没问题,但是如何考虑海拔而不是海平面???我已经用完了很多组合尝试,并且花了三天多的时间来帮助我提供帮助

我正在使用Paul Schlyter出色的公共领域C源代码,这似乎是最常见的。它可以让你设置“太阳应该穿越的高度”,例如-12用于航海黄昏或-35/60等,但我不知道如何修改它以解释观测者海拔高度。

例如,厄瓜多尔的基多是海拔2850米的最高城市之一 Lat + Lon:-78.46784,-0.18065
时区:-5
海拔:2850米左右

使用卡西欧的计算器(http://keisan.casio.com/exec/system/1224686065),我发现的少数计算器之一确实考虑了高程,它返回以下内容(日期= 2017年1月1日):
日出= 6:14日落= 18:22海拔= 0米< - 我已经可以得到这个
日出= 6:05日落= 18:30高度= 2850m < - 但我怎么能得到这个?

我可以通过设置Altitude = -35 / 60(-0.58333)UpperLimb = 1.0来获得第一个(elev = 0) 但如何获得第二个?

我正在使用以下功能:

int sunriset( int year, int month, int day, double lon, double lat,
                  double altit, int upper_limb, double *trise, double *tset )
/*************************************************************/
/* altit = the altitude which the Sun should cross           */
/*         Set to -35/60 degrees for rise/set, -6 degrees    */
/*         for civil, -12 degrees for nautical and -18       */
/*         degrees for astronomical twilight.                */
/* upper_limb: non-zero -> upper limb, zero -> center        */
/*         Set to non-zero (e.g. 1) when computing rise/set  */
/*         times, and to zero when computing start/end of    */
/*         twilight.                                         */
/**************************************************************/

SUNRISE.C(我做了这个准备运行示例):,带有硬编码的Quito lat / long / etc:https://pastebin.com/XSWR2Hby 编译:gcc sunrise.c -o sunrise.exe

1 个答案:

答案 0 :(得分:0)

假设一个没有升高的环境,即在山上,而不是在一个大的高原上,你可以首先计算所有通过感兴趣点接触到地球表面的切线的点形成的圆。 (基多)然后在这个圈子上找到最早的日出和最新的日落。如果阳光照射在这个圆圈的任何部分,它也会在感兴趣的地方闪耀。

在高原上,我认为你不需要做任何事情(如果基多处于高原状态,这意味着卡西欧是错的),正确的做法是对更大的地球进行计算半径或直径但Paul的代码中没有变量。据推测,行星大小的影响太小而无法相关,并且假定到达地球的太阳光线是平行的(它们不是)。

相关问题