logo资料库

GPS卫星位置计算.doc

第1页 / 共3页
第2页 / 共3页
第3页 / 共3页
资料共3页,全文预览结束
GPS 卫星位置的计算 利用 C++编写了一段能计算单一瞬时卫星坐标的程序,在运行程序之前,需做部分准备工作: (1)在 F 盘下建立一名为“单一卫星广播星历”的 txt 文件。 (2)从“广播星历.txt”文件中拷贝从卫星 PRN 号开始的 8 行数据到“单一卫星广播星历.txt” 中 (3)在编辑选项中,将全部的“D”替换为“E”。 下面为我所选取的一个广播星历: 18 06 0.0-2.472363412380E-04-1.023181539495E-12 0.000000000000E+00 8 25 6 0 1.410000000000E+02-1.721875000000E+01 4.502687555010E-09 1.413760604187E+00 -7.990747690201E-07 7.598234573379E-03 1.118145883083E-05 5.153709835052E+03 4.536000000000E+05-1.303851604462E-08-1.095067942661E-01 1.527369022369E-07 9.571235745530E-01 1.640000000000E+02-2.656176299285E+00-8.037477650349E-09 -5.193073455211E-10 1.000000000000E+00 1.389000000000E+03 0.000000000000E+00 2.000000000000E+00 0.000000000000E+00-1.024454832077E-08 1.410000000000E+02 4.464490000000E+05 4.000000000000E+00 程序设计部分: #include #include= 80)/*广播星历中年只有后两位,化为 4 位,参考 1980 年 1 月 6 日 0 点*/ {
if (n[1] == 80 && n[2] == 1 && n[3] < 6) { n[1] = n[1] + 2000; } n[1] = n[1] + 1900; } else { n[1] = n[1] + 2000; } if (n[2] <= 2) { yy = n[1] - 1; mm = n[2] + 12; } if (n[2] > 2) { yy = n[1]; mm = n[2]; } JD = (int)(365.25 * yy) + (int)(30.6001 * (mm + 1)) + n[3] + (UT / 24) + 1720981.5;/*化为 儒略日*/ gpsz = (int)((JD - 2444244.5) / 7);/*计算 GPS 周*/ t = (JD - 2444244.5 - 7 * gpsz) * 24 * 3600;/*得出 GPS 秒*/ tk = t - n[18];/*tk1 为中间值,用以判断 tk 与正负 302400 的关系,然后返回到 tk 上*/ while (tk > 302400 || tk < -302400) { if (tk > 302400) { tk = tk - 604800; } else { } tk = tk + 604800; }/*计算归化观测时间*/ Mk = n[13] + nn * tk;/*观测时刻的卫星平近点角*/ Ek = Mk; Ek = Mk + n[15] * sin(Ek); Ek = Mk + n[15] * sin(Ek);/*迭代两次计算观测时刻的偏近点角*/ Vk = atan(sqrt(1 - n[15] * n[15]) * sin(Ek)) / (cos(Ek) - n[15]);/*真近点角*/ Yk = Vk + n[24];/*升交距角*/ Gu = n[14] * cos(2 * Yk) + n[16] * sin(2 * Yk); Gr = n[23] * cos(2 * Yk) + n[11] * sin(2 * Yk);
Gi = n[19] * cos(2 * Yk) + n[21] * sin(2 * Yk);/*摄动改正项*/ uk = Yk + Gu; rk = n[17] * n[17] * (1 - n[15] * cos(Ek)) + Gr; ik = n[22] + Gi + n[26] * tk;/*经摄动改正后的升交距角、卫星矢径、轨道倾角*/ xk = rk * cos(uk); yk = rk * sin(uk); zk = 0;/*卫星在轨道坐标系的坐标*/ Lk = n[20] + (n[25] - 7.29211515E-5) * tk - 7.29211515E-5 * n[18];/*观测时刻 t 的升交点 经度*/ X = xk * cos(Lk) - yk * cos(ik) * sin(Lk); Y = xk * sin(Lk) + yk * cos(ik) * cos(Lk); Z = yk * sin(ik);/*卫星在 WGS-84 坐标系的坐标*/ printf("该卫星在 WGS-84 坐标系中的坐标为:\nX = %lf m\nY = %lf m\nZ = %lf m\n", X, Y, Z); fclose(fp); return 0; } 计算结果: 该卫星在 WGS-84 坐标系中的坐标为: X = 9223153.692525 m Y = 24133486.931401 m Z = 6032585.919385 m
分享到:
收藏