GPS 卫星位置的计算
利用 C++编写了一段能计算单一瞬时卫星坐标的程序,在运行程序之前,需做部分准备工
作:
(1)在 F 盘下建立一名为“单一卫星广播星历”的 txt 文件。
(2)从“广播星历.txt”文件中拷贝从卫星 PRN 号开始的 8 行数据到“单一卫星广播星历.txt”
中
(3)在编辑选项中,将全部的“D”替换为“E”。
下面为我所选取的一个广播星历:
18 06 8 25 6 0 0.0-2.472363412380E-04-1.023181539495E-12 0.000000000000E+00
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<stdio.h>
#include<math.hint main()
{
int i = 0;
double n[50], n0, nn, t, tk, Mk, Ek, Vk, Yk, Gu, Gr, Gi, uk, rk, ik, xk, yk, zk, X, Y, Z, Lk, UT,
yy, mm, JD, gpsz;
FILE *fp;
fp = fopen("F:\单一卫星广播星历.txt", "r");
if (fp == NULL)
{
printf ("文件打开失败!");
return 0;
}
while (! feof (fp))
{
fscanf(fp, "%lf", &n[i]);
i++;
}
n0 = (sqrt(3986005E+8))/pow(n[17], 3);
nn = n0 + n[12];/*计算卫星运行的平均角速度*/
UT = n[4] + (n[5] / 60) + (n[7] / 3600);/*民用日的时分秒化为实数时*/