如何根据地理经纬度计算日出日落天亮天黑?或者类似函数?
- 提问者网友:玫瑰园
- 2021-08-22 13:42
- 五星知识达人网友:一叶十三刺
- 2021-08-22 14:56
有函数的,但是要根据当地的经纬度以及当日日期,还有海拔情况,其实和天气也有关系。
这里有一个函数,但是很长,可以复制给你。
Function TaiYHJ(t) '太阳黄经,t为儒略世纪数
t = t + (32 * (t + 1.8) * (t + 1.8) - 20) / 86400 / 36525 '儒略世纪年数,力学时
j = 48950621.66 + 6283319653.318 * t + 53 * t * t - 994 + 334166 * Cos(4.669257 + 628.307585 * t) + 3489 * Cos(4.6261 + 1256.61517 * t) + 2060.6 * Cos(2.67823 + 628.307585 * t) * t
TaiYHJ = j / 10000000
End Function
Function ShJ(jd, L, fa, TZ) 'jd儒略日平午,L地理经度,fa地理纬度,TZ时区,返回太阳升起时间
jd = jd - TZ
t = jd / 36525: j = TaiYHJ(t): sinJ = Sin(j): cosJ = Cos(j) '太阳黄经以及它的正余弦值
gst = 2 * Pi * (0.779057273264 + 1.00273781191135 * jd) + (0.014506 + 4612.15739966 * t + 1.39667721 * t * t) / rad '其中2*PI*(0.7790572732640 + 1.00273781191135448*jd)恒星时(子午圈位置)
E = (84381.406 - 46.836769 * t) / rad '黄赤交角
a = Atn2(sinJ * Cos(E), cosJ) '太阳赤经
D = ASin(Sin(E) * sinJ) '/太阳赤纬
cosH0 = (Sin(-50 * 60 / rad) - Sin(fa) * Sin(D)) / (Cos(fa) * Cos(D)) '日出的时角计算,地平线下50分
cosH1 = (Sin(-6 * 3600 / rad) - Sin(fa) * Sin(D)) / (Cos(fa) * Cos(D)) '天亮的时角计算,地平线下6度,若为航海请改为地平线下12度
If (cosH0 >= 1 Or cosH0 <= -1) Then '严格应当区分极昼极夜,本程序不算
ShJ = -0.5 '极昼
Exit Function
End If
H0 = -ACos(cosH0) '升点时角(日出)若去掉负号 就是降点时角,也可以利用中天和升点计算
H1 = -ACos(cosH1)
H = gst - L - a '太阳时角
ShJ = jd - Jiaodu(H - H0) / Pi / 2 + TZ '日出时间,函数返回值
ZhongT = jd - Jiaodu(H) / Pi / 2 + TZ '中天时间,函数隐含返回
TianLian = jd - Jiaodu(H - H1) / Pi / 2 + TZ '天亮时间,函数隐含返回
End Function
Function Huansuan(Y, M, D, H, F, s)
n = 0
If (M <= 2) Then
M = M + 12: Y = Y - 1
End If
If (Y * 372 + M * 31 + D >= 588829) Then
n = Int(Y / 100): n = 2 - n + Int(n / 4)
End If
n = n + Int(365.25 * (Y + 4716) + 0.01)
n = n + Int(30.6 * (M + 1)) + D '
n = n + ((s / 60 + F) / 60 + H) / 24 - 1524.5
Huansuan = n
End Function
具体是用方法见如下链接:
http://user.qzone.qq.com/3625428/blog/1280416179
- 1楼网友:独钓一江月
- 2021-08-22 15:09