永发信息网

急求GPS卫星坐标计算C#程序!!!

答案:2  悬赏:20  手机版
解决时间 2021-02-25 17:12
急求GPS卫星坐标计算C#程序!!!
最佳答案
try
{
//参数赋值
double ss1 = 0.00000001, ss2 = 1000000,we=7.2921151467*ss1*1000;
double pi = 3.1415926535;
string[] str = textBox2.Text.Trim().Split(' ');
double[,] a = new double[7, 4];
int k = 0;
for (int i = 0; i < 7; i++)
{
for (int j = 0; j < 4; j++)
{
a[i, j] = Convert.ToDouble(str[k]);
k++;
}
}
//规划时刻计算
int[] dinmth = new int[12];
double year, month, day, hour, minute, second, dayofy, ttlday, dayofw, gpstime, tk;
int weekno;
dinmth[0] = 31; dinmth[1] = 28; dinmth[2] = 31;
dinmth[3] = 30; dinmth[4] = 31; dinmth[5] = 30;
dinmth[6] = 31; dinmth[7] = 31; dinmth[8] = 30;
dinmth[9] = 31; dinmth[10] = 30; dinmth[11] = 31;
year = Convert.ToDouble(textBox21.Text);
month = Convert.ToDouble(textBox22.Text);
day = Convert.ToDouble(textBox23.Text);
hour = Convert.ToDouble(textBox24.Text);
minute = Convert.ToDouble(textBox25.Text);
second = Convert.ToDouble(textBox26.Text);
if (month == 1)
{
dayofy = day;
}
else
{
dayofy = 0;
for (int i = 0; i < 12; i++)
{
dayofy += dinmth[i];
if (i == 1)
{
if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0)
dayofy += 1;
}
}
dayofy += day;
}
ttlday = 360;
for (int yr = 1981; yr < year; yr++)
{
ttlday += 365;
if (yr % 4 == 0 && yr % 100 != 0 || yr % 400 == 0)
{
ttlday += 1;
}
}
ttlday += dayofy;
weekno = (int)(ttlday / 7);
dayofw = ttlday - 7 * weekno;
gpstime = hour * 3600 + minute * 60 + second + dayofw * 86400;
tk = gpstime - a[3, 0] * ss2;
if (tk > 302400)
{
tk -= 604800;
}
else if(tk<-302400)
{
tk += 602400;

}
app.value1 = tk.ToString("e2");
//平均角速度计算
double n0, n;
n0 = (Math.Sqrt(3986004.418) / Math.Pow(a[2, 3], 3)) * ss1;
n = n0 + a[1, 2] * ss1;
app.value2 = n.ToString("e2");
//平近点角计算
double M0, Mk;
M0 = a[1, 3];
Mk = M0 * 10 + n * tk;
if (Math.Abs(Mk) > 2 * pi)
{
int w1 = (int)(Mk / (2 * pi));
Mk = Mk - 2 * pi * w1;
}
app.value3 = Mk.ToString("e2");
//偏近点角计算
double Ek, E0;
Ek = Mk;
do
{
E0 = Ek;
Ek = Mk + a[2, 1] * 0.1 * Math.Sin(E0);
} while (Math.Abs(Ek - E0) > 0.00000001);
app.value4 = Ek.ToString("e2");
//真近点角
double angle1, angle2, Vk;
angle1 = Math.Sqrt(1 - Math.Pow(a[2, 1] * 0.1, 2)) * Math.Sin(Ek);
angle2 = Math.Cos(Ek) - a[2, 1] * 0.1;
Vk = Math.Atan(Math.Abs(angle1 / angle2));
if (angle1 >= 0 && angle2 <= 0)
{
Vk = pi - Vk;
}
else if (angle1 <= 0 && angle2 <=0)
{
Vk = pi + Vk;
}
else
{
Vk = 2 * pi - Vk;
}
app.value5 = Vk.ToString("e");
//升交角距
double Qk;
Qk = Vk + a[4, 2] * 10;
if (Math.Abs(Qk) > 2 * pi)
{
int w2 = (int)(Qk / (2 * pi));
Qk = Qk - 2 * pi * w2;
}
app.value6 = Qk.ToString("e");
//升交角距改正,轨道向径改正,轨道倾角改正计算
double Fu, Fr, Fi;
Fu = a[2, 0] * ss1 * 1000 * Math.Cos(2 * Qk) + a[2, 2] * ss1 * 1000 * Math.Sin(2 * Qk);
Fr = a[4, 1] * 1000 * Math.Cos(2 * Qk) + a[1, 1] * 100 * Math.Sin(2 * Qk);
Fi = a[3, 1] * ss1 * 100 * Math.Cos(2 * Qk) + a[3, 3] * ss1 * 10 * Math.Sin(2 * Qk);
app.value7 = Fu.ToString("e");
app.value8 = Fr.ToString("e");
app.value9 = Fi.ToString("e");
//改正后升交角距、轨道向径、轨道倾角计算
double Uk, Rk, Ik;
Uk = Qk + Fu;
Rk = Math.Pow(a[2, 3] * ss2 * 0.01, 2) * (1 - a[2, 1] * 0.1 * Math.Cos(Ek)) + Fr;
Ik = a[4, 0] + Fi + a[5, 0] * ss1 * 0.1 * tk;
app.value10 = Uk.ToString("e");
app.value11 = Rk.ToString("e");
app.value12 = Ik.ToString("e");
//升交点轨道直角坐标系坐标计算
double Xk, Yk;
Xk = Rk * Math.Cos(Uk);
Yk = Rk * Math.Sin(Uk);
app.value13 = Xk.ToString("e");
app.value14 = Yk.ToString("e");
//升交点经度计算
double N;
int w3;
N = a[3, 2] * 10 + (a[4, 3] * ss1 - we) * tk - we * a[3, 0] * ss2;
if (Math.Abs(N) > 2 * pi)
{
w3 =(int)(N / (2 * pi));
N = N - 2 * pi * w3;

}
app.value15 =N.ToString("e");
//地固坐标系下卫星空间直角坐标计算,Ik为ik
double X, Y, Z;
X = Xk * Math.Cos(N) - Yk * Math.Cos(Ik) * Math.Sin(N);
Y = Xk * Math.Sin(N) + Yk * Math.Cos(Ik) * Math.Cos(N);
Z = Yk * Math.Sin(Ik);
app.value16 = X.ToString("e");
app.value17 = Y.ToString("e");
app.value18 = Z.ToString("e");
new Form2().ShowDialog();
}
catch
{
MessageBox.Show("请输入卫星时刻或又一次加载卫星参数导致出错");
return;
}
全部回答
gps经纬度坐标转换的方法 一、十进制转换成经纬度 把经纬度转换成十进制的方法很简单 如下就可以了 decimal degrees = degrees + minutes/60 + seconds/3600 例:57°55'56.6" =57+55/60+56.6/3600=57.9323888888888 114°65'24.6"=114+65/60+24.6/3600=结果自己算! 如把经纬度 (longitude,latitude) (205.395583333332,57.9323888888888) 转换据成坐标(degrees,minutes,seconds)(205°23'44.1",57°55'56.6")。 步骤如下: 1, 直接读取"度":205 2,(205.395583333332-205)*60=23.734999999920 得到"分":23 3,(23.734999999920-23)*60=44.099999995200 得到"秒":44.1 采用同样的方法可以得到纬度坐标:57°55'56.6" 如果需要转换的经纬度数据很多,可以借助sql查询分析器或excel来进行转换。这里介绍用sql实现。 假如我的数据库里的表tablename有以下数据 create table [dbo].[tablename]( [id] [int] identity(1,1) not null, [address] [varchar](20) collate chinese_prc_ci_as null, [longitude] [float] null, [latitude] [float] null ) on [primary] go 表中的数据 id address longitude latitude 0 add1 205.3955833 57.93238889 1 add2 205.39
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
微信文字转语音怎么用
华为荣耀v8来电话没声音怎么办
【直流转交流逆变器】直流电与交流电太阳能或
邯郸天康中医院地址在哪,我要去那里办事
卓洛的三把刀以及来历
MAUD FRIZON地址在什么地方,想过去办事
下列物质在水溶液中既能电离又能水解的是( 
女的来事了,能生气吗?
男人说受宠若惊什么意思
农达除草剂能除掉蕨类和野竹子吗?
英皇国际首席KTV娱乐会所我想知道这个在什么
“情嗜幸非多,案牍偏为寡”是什么意思如题
从温州到郑州怎么转火车最便宜,最快
下雨天,带出门的笔记本怎么带回家?
咆哮的意思什么
推荐资讯
【欢迎你远方的客人】草原牧民说:我人欢迎你
公司一个事业部要搬到另一个城市 人事把我安
初一学生怎么练腹肌
广州市番禺区人力资源管理协会在哪里啊,我有
滨滨车行地址在什么地方,想过去办事
麻将三番是什么意思
君山银针是什么种类的茶?
楼房的顶层好不好?有哪些利弊?
弯掌山这个地址在什么地方,我要处理点事
是不是有这样的句式:take sth in doing sth
带木子偏旁部首的成语
磨砂型的手机屏保贴纸贴反了对触摸有影响吗
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?