空间大地测量与GPS导航定位时间系统相互转换格里高利时通用时儒略日GPS时年积日相互转换的源代码程序Word格式文档下载.docx

上传人:b****1 文档编号:4444508 上传时间:2023-05-03 格式:DOCX 页数:16 大小:97.23KB
下载 相关 举报
空间大地测量与GPS导航定位时间系统相互转换格里高利时通用时儒略日GPS时年积日相互转换的源代码程序Word格式文档下载.docx_第1页
第1页 / 共16页
空间大地测量与GPS导航定位时间系统相互转换格里高利时通用时儒略日GPS时年积日相互转换的源代码程序Word格式文档下载.docx_第2页
第2页 / 共16页
空间大地测量与GPS导航定位时间系统相互转换格里高利时通用时儒略日GPS时年积日相互转换的源代码程序Word格式文档下载.docx_第3页
第3页 / 共16页
空间大地测量与GPS导航定位时间系统相互转换格里高利时通用时儒略日GPS时年积日相互转换的源代码程序Word格式文档下载.docx_第4页
第4页 / 共16页
空间大地测量与GPS导航定位时间系统相互转换格里高利时通用时儒略日GPS时年积日相互转换的源代码程序Word格式文档下载.docx_第5页
第5页 / 共16页
空间大地测量与GPS导航定位时间系统相互转换格里高利时通用时儒略日GPS时年积日相互转换的源代码程序Word格式文档下载.docx_第6页
第6页 / 共16页
空间大地测量与GPS导航定位时间系统相互转换格里高利时通用时儒略日GPS时年积日相互转换的源代码程序Word格式文档下载.docx_第7页
第7页 / 共16页
空间大地测量与GPS导航定位时间系统相互转换格里高利时通用时儒略日GPS时年积日相互转换的源代码程序Word格式文档下载.docx_第8页
第8页 / 共16页
空间大地测量与GPS导航定位时间系统相互转换格里高利时通用时儒略日GPS时年积日相互转换的源代码程序Word格式文档下载.docx_第9页
第9页 / 共16页
空间大地测量与GPS导航定位时间系统相互转换格里高利时通用时儒略日GPS时年积日相互转换的源代码程序Word格式文档下载.docx_第10页
第10页 / 共16页
空间大地测量与GPS导航定位时间系统相互转换格里高利时通用时儒略日GPS时年积日相互转换的源代码程序Word格式文档下载.docx_第11页
第11页 / 共16页
空间大地测量与GPS导航定位时间系统相互转换格里高利时通用时儒略日GPS时年积日相互转换的源代码程序Word格式文档下载.docx_第12页
第12页 / 共16页
空间大地测量与GPS导航定位时间系统相互转换格里高利时通用时儒略日GPS时年积日相互转换的源代码程序Word格式文档下载.docx_第13页
第13页 / 共16页
空间大地测量与GPS导航定位时间系统相互转换格里高利时通用时儒略日GPS时年积日相互转换的源代码程序Word格式文档下载.docx_第14页
第14页 / 共16页
空间大地测量与GPS导航定位时间系统相互转换格里高利时通用时儒略日GPS时年积日相互转换的源代码程序Word格式文档下载.docx_第15页
第15页 / 共16页
空间大地测量与GPS导航定位时间系统相互转换格里高利时通用时儒略日GPS时年积日相互转换的源代码程序Word格式文档下载.docx_第16页
第16页 / 共16页
亲,该文档总共16页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

空间大地测量与GPS导航定位时间系统相互转换格里高利时通用时儒略日GPS时年积日相互转换的源代码程序Word格式文档下载.docx

《空间大地测量与GPS导航定位时间系统相互转换格里高利时通用时儒略日GPS时年积日相互转换的源代码程序Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《空间大地测量与GPS导航定位时间系统相互转换格里高利时通用时儒略日GPS时年积日相互转换的源代码程序Word格式文档下载.docx(16页珍藏版)》请在冰点文库上搜索。

空间大地测量与GPS导航定位时间系统相互转换格里高利时通用时儒略日GPS时年积日相互转换的源代码程序Word格式文档下载.docx

其中

如果M≤2,则y=Y-1,m=M+12

如果M>

2,则y=Y,m=M

JD为儒略日,Y为年,M为月,D为日,UT为世界时。

2.1.2由儒略日转换到通用时(JulianDayToCommonTime(pjd,pct))

2.2通用时与GPS时间间的相互转换

2.2.1由通用时转换到GPS时间(CommonTimeToGPSTime(pct,pgt))

主要分两步进行:

第一步:

计算GPS周

第二步:

计算一周内的秒数

2.2.2由GPS时间转换到通用时(GPSTimeToCommonTime(pgt,pct))

由GPS时间转换到儒略日

由儒略日转换到通用时

2.3儒略日与年积日之间的相互转换

2.3.1由儒略日转换到年积日(JulianDayToDOY(pjd,pdoy))

主要分三步进行:

计算出通用时

计算出当年1月1日的儒略日

第三步:

两个儒略日求差加1,得出年积日

2.3.2年积日转换到儒略日(DOYToJulianDay(pdoy,pjd))

主要分一下两步进行:

计算出当年1月1日的儒略日JD1

年积日加JD1减1得儒略日

2.4GPS时与年积日间的相互转换

参照儒略日与年积日之间转换方法进行就可以得到结果。

GPS时转换到年积日(GPSTimeToDOY(pgt,pdoy))

年积日转换到GPS时(DOYToGPSTime(pdoy,pgt))

3.算例及结果

通过在VC++6.0环境下编写了各个坐标系统的相互转换,并得到了转换的结果,在试验中使用的已知数据是即使数据,取的时间是当时时间2011年1月7日19时38分45.26秒,用这个已知数据代入函数中,分别求得各个时间系统的GPS时、儒略时、年积日时,并通过各个时间系统的各自相互转换,最后输出的结果如下图所示

通过上图我们可以看出,得到的结果还是非常满意的,程序基本完成了各个时间系统的相互转换,从各个时间相互转换后得到的时间结果,并还原成转换前的数据,得到的结果都是完全符合,由此可见我们的计算结果是正确的,

4.心得体会

这次编程试验,虽说这次试验比较简单,但还是花了较长的时间,修修改改的,以前看到过类似程序,觉得自己应该没啥问题,应该很简单,自己能轻易拿下,可真做起来并不是这么一回事,总是出现一些小bug,不知道问题出在那里,明明感觉公式输入对的,语法也没啥问题,偏偏结果不对,与期望的值差别很大,最后经过调试总算解决了这些问题,比如有次明明记得公式输入是正确的,最后发现还是不小心输错了,结果导致错误。

经过这次编程,这次试验,使自己的编程水平有了较大的提高,以前很多的时候都是只看程序,感觉很简单,并不自己动手,其实其中很多问题,只有自己亲自经历才知道一些简单的东西也会出问题,卡住思维,最后经过努力解决了问题,心里还是蛮开心的,有一定的成就感。

经过这次试验,学到了很多东西,有比较深的感触,对VC++不像以前那么排斥了,不像以前总感觉有点儿惧怕它,现在总算不抵触他了,希望在以后的学习中能够喜欢上它。

5.附录(程序中的源代码)

#include<

iostream>

usingnamespacestd;

typedefstructtagCOMMONTIME

{

intyear;

intmonth;

intday;

inthour;

intminute;

doublesecond;

}COMMONTIME;

//通用时

typedefCOMMONTIME*PCOMMONTIME;

typedefstructtagTOD

longsn;

//秒数的整数部分

doubletos;

//秒数的小数部分

}TOD;

typedefTOD*PTOD;

typedefstruct

longday;

//整数天数

TODtod;

//一天内的秒数

}JULIANDAY;

//儒略日

typedefJULIANDAY*PJULIANDAY;

typedefstructtagMJULIANDAY

}MJULIANDAY;

//新儒略日

typedefMJULIANDAY*PMJIANDAY;

typedefstructtagTOW

//秒整数部分

//秒小数部分

}TOW;

typedefTOW*PTOW;

typedefstructtagGPSTIME

intwn;

//周数

TOWtow;

//一周内的秒数

}GPSTIME;

//GPS时

typedefGPSTIME*PGPSTIME;

typedefstructtagDOY

unsignedshortyear;

unsignedshortday;

}DOY;

//年积日

typedefDOY*PDOY;

doubleFRAC(doublemorigin)

returnmorigin-long(morigin);

//取小数部分

}

voidCommonTimeToJulianDay(PCOMMONTIMEpct,PJULIANDAYpjd)//通用时到儒略日的转换

if(pct->

year<

1900)

{

if(pct->

80)

pct->

year+=2000;

elsepct->

year+=1900;

}

doubleut=pct->

hour+pct->

minute/60.0+pct->

second/3600.0;

month<

=2)

year-=1;

month+=12;

pjd->

day=int(365.25*pct->

year)+int(30.6001*(pct->

month+1))+pct->

day+int(ut/24+1720981.5);

tod.sn=((pct->

hour+12)%24)*3600+pct->

minute*60+(int)pct->

second;

//秒的整数部分

tod.tos=pct->

second-(int)pct->

//秒的小数部分

}

voidJulianDayToCommonTime(PJULIANDAYpjd,PCOMMONTIMEpct)//儒略日到通用时的转换

doublex=pjd->

day+(pjd->

tod.sn+pjd->

tod.tos)/(60.0*60.0*24);

inta=int(x+0.5);

intb=a+1537;

intc=int((b-122.1)/365.25);

intd=int(365.25*c);

inte=int((b-d)/30.6001);

pct->

day=b-d-int(30.6001*e);

month=e-1-12*int(e/14);

year=c-4715-int((7+pct->

month)/10);

hour=(pjd->

tod.sn/3600+12)%24;

minute=(pjd->

tod.sn%3600)/60;

second=pjd->

tod.sn%60+pjd->

tod.tos;

intN=a%7;

voidJulianDayToGPSTime(PJULIANDAYpjd,PGPSTIMEpgt)//儒略日到GPS时的转换

pgt->

wn=int((x-2444244.5)/7);

tow.sn=int(((pjd->

day-2444244)%7+(pjd->

tod.sn/(60.0*60.0*24)-0.5))*86400);

tow.tos=pjd->

voidGPSTimeToJulianDay(PGPSTIMEpgt,PJULIANDAYpjd)//GPS时到儒略日的转换

day=int(pgt->

wn*7+double(pgt->

tow.sn)/86400.0+2444244.5);

tod.sn=(pgt->

tow.sn+43200)%86400;

tod.tos=pgt->

tow.tos;

voidCommonTimeToGPSTime(PCOMMONTIMEpct,PGPSTIMEpgt)//通用时到GPS时的转换

PJULIANDAYpjd=newJULIANDAY;

CommonTimeToJulianDay(pct,pjd);

JulianDayToGPSTime(pjd,pgt);

voidGPSTimeToCommonTime(PGPSTIMEpgt,PCOMMONTIMEpct)//GPS时到通用时的转换

GPSTimeToJulianDay(pgt,pjd);

JulianDayToCommonTime(pjd,pct);

voidCommonTimeToDOY(PCOMMONTIMEpct,PDOYpdoy)

PCOMMONTIMEpcto=newCOMMONTIME;

pcto->

year=pct->

year;

month=1;

day=1;

hour=0;

minute=0;

second=0;

PJULIANDAYpjdo=newJULIANDAY;

doubleJD,JDO;

CommonTimeToJulianDay(pcto,pjdo);

JDO=pjdo->

day+(pjdo->

tod.sn+pjdo->

tod.tos)/86400;

JD=pjd->

pdoy->

day=short(JD-JDO+1);

tod.sn=long(pct->

hour*3600

+pct->

minute*60+pct->

second);

second-int(pct->

/*pct->

second-pdoy->

tod.sn;

*/

voidDOYToCommonTime(PDOYpdoy,PCOMMONTIMEpct)

year=pdoy->

JD=JDO+pdoy->

day+(pdoy->

tod.sn+pdoy->

tod.tos)/86400-1;

longa,b,c,d,e;

a=(long)(JD+0.5);

b=a+1537;

c=(long)((b-122.1)/365.25);

d=(long)(365.25*c);

e=(long)((b-d)/30.6001);

day=short(b-d-(long)(30.6001*e)+FRAC(JD+0.5));

month=short(e-1-12*(long)(e/14));

year=short(c-4715-(long)((7+pct->

month)/10));

hour=short((pdoy->

tod.tos)/3600);

minute=short((pdoy->

tod.tos

-pct->

hour*3600)/60);

second=pdoy->

hour*3600-pct->

minute*60;

voidGPSTimeToDOY(PGPSTIMEpgt,PDOYpdoy)

GPSTimeToJulianDay(pgt,pjd);

PCOMMONTIMEpct=newCOMMONTIME;

JulianDayToCommonTime(pjd,pct);

CommonTimeToDOY(pct,pdoy);

voidDOYToGPSTime(PDOYpdoy,PGPSTIMEpgt)

DOYToCommonTime(pdoy,pct);

CommonTimeToGPSTime(pct,pgt);

voidJulianDayToDOY(PJULIANDAYpjd,PDOYpdoy)

{

JulianDayToCommonTime(pjd,pct);

voidDOYToJulianDay(PDOYpdoy,PJULIANDAYpjd)

voidmain()

PJULIANDAYpjd=newJULIANDAY;

PDOYpdoy=newDOY;

PGPSTIMEpgt=newGPSTIME;

year=2011;

day=6;

hour=19;

minute=38;

second=45.26;

cout<

<

"

转换之前的通用时(当地时间):

;

cout<

pct->

"

day<

hour<

:

minute<

second<

endl;

CommonTimeToJulianDay(pct,pjd);

//通用时->

儒略日的转换

通用时->

儒略日的转换:

pjd->

tod.sn<

tod.tos<

JulianDayToCommonTime(pjd,pct);

//儒略日->

通用时的转换

儒略日->

通用时的转换:

JulianDayToGPSTime(pjd,pgt);

GPS时的转换

GPS时的转换:

pgt->

wn<

tow.sn<

tow.tos<

GPSTimeToJulianDay(pgt,pjd);

//GPS时->

GPS时->

CommonTimeToGPSTime(pct,pgt);

GPSTimeToCommonTime(pgt,pct);

CommonTimeToDOY(pct,pdoy);

年积日

年积日:

pdoy->

DOYToCommonTime(pdoy,pct);

//年积日->

通用时

年积日->

通用时:

GPSTimeToDOY(pgt,pdoy);

DOYToGPSTime(pdoy,pgt);

GPS时

GPS时:

JulianDayToDOY(pjd,pdoy);

DOYToJulianDay(pdoy,pjd);

儒略日

儒略日:

经过各种转换后还原得到的通用时:

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 工程科技 > 能源化工

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2