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

上传人:仙*** 文档编号:36928933 上传时间:2021-11-01 格式:DOC 页数:14 大小:168.50KB
收藏 版权申诉 举报 下载
空间大地测量与GPS导航定位时间系统相互转换格里高利时通用时儒略日GPS时年积日相互转换的源代码程序_第1页
第1页 / 共14页
空间大地测量与GPS导航定位时间系统相互转换格里高利时通用时儒略日GPS时年积日相互转换的源代码程序_第2页
第2页 / 共14页
空间大地测量与GPS导航定位时间系统相互转换格里高利时通用时儒略日GPS时年积日相互转换的源代码程序_第3页
第3页 / 共14页
资源描述:

《空间大地测量与GPS导航定位时间系统相互转换格里高利时通用时儒略日GPS时年积日相互转换的源代码程序》由会员分享,可在线阅读,更多相关《空间大地测量与GPS导航定位时间系统相互转换格里高利时通用时儒略日GPS时年积日相互转换的源代码程序(14页珍藏版)》请在装配图网上搜索。

1、进行空间大地测量所需时间系统的相互转换 测绘学院 高攀 20102021400471.时间标示法从古至今,世界各国曾出现过多种历法,如罗马历、儒略日、格里高利以及我国的农历等,目前世界上广泛采用的历法是格里高利历。1.1.格里高利时(通用时)格里高利历也称公历,现被世界各国广泛采用。格里高利历是一个由146097天所组成的400年周期为基础,1年的平均长度为365.2425天。根据格里高利历1年被划分为12个月。其标示时间时采用年、月、日、时、分、秒的方法。这种计时反映季节变化,与日常生活密切相关,但非连续,不利于数学表达和科学计算1.2.儒略日儒略日是一种不涉及年、月等概念的长期连续的记日法

2、,在天文学、空间大地测量和卫星导航定位中经常使用。这种方法是有Scaliger与1583年提出的,为纪念他的父亲儒略而命名为儒略日。儒略日的起点订在公元前4713年(天文学上记为 -4712 年)1月1日格林威治时间平午(世界时12:00),即JD 0 指定为 4713 B.C. 1月1日12:00 UT到4713 B.C. 1月2日12:00 UT的24小时。每一天赋予了一个唯一的数字。由于儒略日数字位数太多,国际天文学联合会于1973年采用简化儒略日(MJD),其定义为 MJD = JD - 2400000.5。MJD相应的起点是1858年11月17日世界时0时。 例如1979年10月1日

3、零时儒略日数为2,444,147.5。1.3.GPS时GPS系统内部所采用的时间系统是GPS时间,GPS时以1980年1月6日子夜为起点,用周数(一个星期七天)和周内的秒数来表示1.4.年积日所谓年积日就是指的是从每年的1月1日起开始累计的天数,计数从1开始(即每年1月1日的年积日为1),如2004年5月1日的年积日为122。用他可以方便的求出一年内两个时刻T1和T2间的时间间隔。2.各个时间系统的相互转换各个时间系统都有严格的转换公式,其转换的主要思想是把通用时、GPS时间、和年积日分别转换为儒略日,然后以儒略日为媒介,实现任意两个时间系统的相互转换,如下图所示:转换思想2.1通用时与儒略日

4、间的相互转换2.1.1由通用时转换到儒略日(CommonTimeToJulianDay( pct, pjd))其中如果M2,则y=Y-1,m=M+12如果M2,则y=Y,m=MJD为儒略日,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( p

5、gt, 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时转换到年积日(GPSTim

6、eToDOY ( pgt, pdoy))年积日转换到GPS时(DOYToGPSTime (pdoy, pgt))3.算例及结果通过在VC+6.0环境下编写了各个坐标系统的相互转换,并得到了转换的结果,在试验中使用的已知数据是即使数据,取的时间是当时时间2011年1月7日19时38分45.26秒,用这个已知数据代入函数中,分别求得各个时间系统的GPS时、儒略时、年积日时,并通过各个时间系统的各自相互转换,最后输出的结果如下图所示通过上图我们可以看出,得到的结果还是非常满意的,程序基本完成了各个时间系统的相互转换,从各个时间相互转换后得到的时间结果,并还原成转换前的数据,得到的结果都是完全符合,由

7、此可见我们的计算结果是正确的,4.心得体会首先得向魏老师说声对不起,现在我感到很惭愧,第一次的作业做得实在不像话,最终只得了个B+,太对不起魏老师了,希望这次作业能够弥补。这次编程试验,虽说这次试验比较简单,但还是花了较长的时间,修修改改的,以前看到过类似程序,觉得自己应该没啥问题,应该很简单,自己能轻易拿下,可真做起来并不是这么一回事,总是出现一些小bug,不知道问题出在那里,明明感觉公式输入对的,语法也没啥问题,偏偏结果不对,与期望的值差别很大,最后经过调试总算解决了这些问题,比如有次明明记得公式输入是正确的,最后发现还是不小心输错了,结果导致错误。经过这次编程,这次试验,使自己的编程水平

8、有了较大的提高,以前很多的时候都是只看程序,感觉很简单,并不自己动手,其实其中很多问题,只有自己亲自经历才知道一些简单的东西也会出问题,卡住思维,最后经过努力解决了问题,心里还是蛮开心的,有一定的成就感。经过这次试验,学到了很多东西,有比较深的感触,对VC+不像以前那么排斥了,不像以前总感觉有点儿惧怕它,现在总算不抵触他了,希望在以后的学习中能够喜欢上它,使自己成为一个合格的研究生、一个优秀的研究生。5.附录(程序中的源代码)#includeusing namespace std;typedef struct tagCOMMONTIMEint year;int month; int day;

9、int hour;int minute;double second;COMMONTIME;/通用时typedef COMMONTIME *PCOMMONTIME; typedef struct tagTODlong sn; /秒数的整数部分double tos;/秒数的小数部分TOD;typedef TOD *PTOD;typedef structlong day; /整数天数TOD tod; /一天内的秒数JULIANDAY;/儒略日typedef JULIANDAY *PJULIANDAY;typedef struct tagMJULIANDAYlong day;TOD tod;MJULI

10、ANDAY;/新儒略日typedef MJULIANDAY *PMJIANDAY;typedef struct tagTOWlong sn;/秒整数部分double tos;/秒小数部分TOW;typedef TOW *PTOW;typedef struct tagGPSTIMEint wn; /周数TOW tow;/一周内的秒数GPSTIME;/GPS时typedef GPSTIME *PGPSTIME;typedef struct tagDOYunsigned short year;unsigned short day;TOD tod;DOY;/年积日typedef DOY *PDOY;d

11、ouble FRAC(double morigin)return morigin-long(morigin);/ 取小数部分void CommonTimeToJulianDay(PCOMMONTIME pct,PJULIANDAY pjd) /通用时到儒略日的转换 if(pct-yearyearyear+=2000;else pct-year+=1900;double ut=pct-hour + pct-minute/60.0 + pct-second/3600.0;if(pct-monthyear-=1;pct-month+=12;pjd-day=int(365.25*pct-year)+i

12、nt(30.6001*(pct-month+1)+pct-day+int(ut/24+1720981.5);pjd-tod.sn= (pct-hour+12)%24)*3600+pct-minute*60+(int)pct-second;/秒的整数部分pjd-tod.tos=pct-second-(int)pct-second;/秒的小数部分 void JulianDayToCommonTime(PJULIANDAY pjd,PCOMMONTIME pct)/儒略日到通用时的转换double x=pjd-day+(pjd-tod.sn+pjd-tod.tos)/(60.0*60.0*24);i

13、nt a=int(x+0.5);int b=a+1537;int c=int(b-122.1)/365.25);int d=int(365.25*c);int e=int(b-d)/30.6001);pct-day=b-d-int(30.6001*e);pct-month=e-1-12*int(e/14);pct-year=c-4715-int(7+pct-month)/10);pct-hour=(pjd-tod.sn/3600+12)%24;pct-minute=(pjd-tod.sn%3600)/60;pct-second=pjd-tod.sn%60+pjd-tod.tos;int N=a

14、%7; void JulianDayToGPSTime(PJULIANDAY pjd,PGPSTIME pgt)/儒略日到GPS时的转换double x=pjd-day+(pjd-tod.sn+pjd-tod.tos)/(60.0*60.0*24);pgt-wn=int(x-2444244.5)/7);pgt-tow.sn=int(pjd-day-2444244)%7+(pjd-tod.sn/(60.0*60.0*24)-0.5)*86400);pgt-tow.tos=pjd-tod.tos;void GPSTimeToJulianDay(PGPSTIME pgt,PJULIANDAY pjd

15、)/GPS时到儒略日的转换pjd-day=int(pgt-wn*7+double(pgt-tow.sn)/86400.0+2444244.5);pjd-tod.sn=(pgt-tow.sn+43200)%86400;pjd-tod.tos=pgt-tow.tos;void CommonTimeToGPSTime(PCOMMONTIME pct,PGPSTIME pgt)/通用时到GPS时的转换PJULIANDAY pjd=new JULIANDAY;CommonTimeToJulianDay(pct,pjd); JulianDayToGPSTime(pjd,pgt);void GPSTimeT

16、oCommonTime(PGPSTIME pgt,PCOMMONTIME pct)/GPS时到通用时的转换PJULIANDAY pjd=new JULIANDAY;GPSTimeToJulianDay(pgt,pjd);JulianDayToCommonTime(pjd,pct);void CommonTimeToDOY (PCOMMONTIME pct, PDOY pdoy)PCOMMONTIME pcto=new COMMONTIME;pcto-year=pct-year;pcto-month=1;pcto-day=1;pcto-hour=0;pcto-minute=0;pcto-seco

17、nd=0;PJULIANDAY pjdo=new JULIANDAY;double JD,JDO;CommonTimeToJulianDay(pcto,pjdo);JDO=pjdo-day+(pjdo-tod.sn+pjdo-tod.tos)/86400;PJULIANDAY pjd=new JULIANDAY;CommonTimeToJulianDay(pct,pjd);JD=pjd-day+(pjd-tod.sn+pjd-tod.tos)/86400;pdoy-day=short(JD-JDO+1);pdoy-year=pct-year;pdoy-tod.sn=long(pct-hour*

18、3600+pct-minute*60+pct-second); pdoy-tod.tos=pct-second-int(pct-second); /*pct-hour*3600+pct-minute*60+pct-second-pdoy-tod.sn;*/void DOYToCommonTime (PDOY pdoy, PCOMMONTIME pct)PCOMMONTIME pcto=new COMMONTIME;pcto-year=pdoy-year;pcto-month=1;pcto-day=1;pcto-hour=0;pcto-minute=0;pcto-second=0;PJULIAN

19、DAY pjdo=new JULIANDAY; double JD,JDO;CommonTimeToJulianDay(pcto,pjdo);JDO=pjdo-day+(pjdo-tod.sn+pjdo-tod.tos)/86400;JD=JDO+pdoy-day+(pdoy-tod.sn+pdoy-tod.tos)/86400-1;long a,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);pct-day=short(b-d-(long

20、)(30.6001*e)+FRAC(JD+0.5);pct-month=short(e-1-12*(long)(e/14);pct-year=short(c-4715-(long)(7+pct-month)/10);pct-hour=short(pdoy-tod.sn+pdoy-tod.tos)/3600);pct-minute=short(pdoy-tod.sn+pdoy-tod.tos-pct-hour*3600)/60);pct-second=pdoy-tod.sn+pdoy-tod.tos-pct-hour*3600-pct-minute*60;void GPSTimeToDOY (P

21、GPSTIME pgt, PDOY pdoy)PJULIANDAY pjd=new JULIANDAY;GPSTimeToJulianDay (pgt, pjd);PCOMMONTIME pct=new COMMONTIME;JulianDayToCommonTime (pjd,pct); CommonTimeToDOY (pct,pdoy);void DOYToGPSTime (PDOY pdoy, PGPSTIME pgt) PCOMMONTIME pct=new COMMONTIME;DOYToCommonTime (pdoy,pct); CommonTimeToGPSTime (pct

22、, pgt);void JulianDayToDOY (PJULIANDAY pjd, PDOY pdoy) PCOMMONTIME pct=new COMMONTIME;JulianDayToCommonTime (pjd, pct);CommonTimeToDOY (pct,pdoy);void DOYToJulianDay (PDOY pdoy, PJULIANDAY pjd)PCOMMONTIME pct=new COMMONTIME;DOYToCommonTime (pdoy,pct);CommonTimeToJulianDay(pct,pjd);void main() PCOMMO

23、NTIME pct=new COMMONTIME; PJULIANDAY pjd=new JULIANDAY; PDOY pdoy=new DOY; PGPSTIME pgt= new GPSTIME; pct-year=2011; pct-month=1; pct-day=6; pct-hour=19; pct-minute=38; pct-second=45.26; cout转换之前的通用时(当地时间):; coutyear month day hour:minute:secondendl; cout儒略日的转换 cout儒略日的转换:; coutday tod.sn tod.tosend

24、l; cout通用时的转换 cout通用时的转换:; coutyear month day hour:minute:secondendl; coutGPS时的转换 coutGPS时的转换:; coutwn tow.sn tow.tosendl; cout儒略日的转换 cout儒略日的转换:; coutday tod.sn tod.tosendl; coutGPS时的转换 coutGPS时的转换:; coutwn tow.sn tow.tosendl; cout通用时的转换 cout通用时的转换:; coutyear month day hour:minute:secondendl; cout年

25、积日 cout年积日:; coutyear day tod.sn tod.tosendl; cout通用时 cout通用时:; coutyear month day hour:minute:secondendl; cout年积日 cout年积日:; coutyear day tod.sn tod.tosendl; coutGPS时 coutGPS时:; coutwn tow.sn tow.tosendl; cout年积日 cout年积日:; coutyear day tod.sn tod.tosendl; cout儒略日 cout儒略日:; coutday tod.sn tod.tosendl; coutendl; cout经过各种转换后还原得到的通用时:; coutyear month day hour:minute:secondendl; coutendl;

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!