欢迎来到三一文库! | 帮助中心 三一文库31doc.com 一个上传文档投稿赚钱的网站
三一文库
全部分类
  • 研究报告>
  • 工作总结>
  • 合同范本>
  • 心得体会>
  • 工作报告>
  • 党团相关>
  • 幼儿/小学教育>
  • 高等教育>
  • 经济/贸易/财会>
  • 建筑/环境>
  • 金融/证券>
  • 医学/心理学>
  • ImageVerifierCode 换一换
    首页 三一文库 > 资源分类 > DOCX文档下载
     

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

    • 资源ID:13043135       资源大小:24.51KB        全文页数:13页
    • 资源格式: DOCX        下载积分:4
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录   微博登录  
    二维码
    微信扫一扫登录
    下载资源需要4
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

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

    进行空间大地测量所需时间系统的相互转换1. 时间标示法从古至今,世界各国曾出现过多种历法,如罗马历、儒略日、格里高利以及 我国的农历等,目前世界上广泛采用的历法是格里高利历。1.1. 格里高利时(通用时)格里高利历也称公历,现被世界各国广泛采用。格里高利历是一个由146097 天所组成的400年周期为基础,1年的平均长度为365.2425天。根据格里高利历 1年被划分为12个月。其标示时间时采用年、月、日、时、分、秒的方法。这 种计时反映季节变化,与日常生活密切相关,但非连续,不利于数学表达和科学 计算1.2. 儒略日儒略日是一种不涉及年、月等概念的长期连续的记日法,在天文学、空间大 地测量和卫星导航定位中经常使用。这种方法是有Scaliger与1583年提出的,为纪念他的父亲儒略而命名为儒略日。儒略日的起点订在公元前4713年(天文学上记为-4712年)1月1日格林威治时间平午(世界时12:00),即JD0 指定为 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日零时儒略日数为 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通用时与儒略日间的相互转换2.1.1 由通用时转换到儒略日(CommonTimeToJulianDay( pct, pjd)JD =INT365.25y 1 INT |30.6001 m 1D UT.,24 1720981.5其中如果 MK 2,则 y=Y-1, m=M+12如果 M>2 贝U y=Y, m=MJD为儒略日,Y为年,M为月,D为日,UT为世界时。2.1.2 由儒略日转换到通用时(JulianDayToCommonTime( pjd, pct)a =INT I.JD 0.51b =a 1537c =IN"b -122.1 365.25d =INT 065.25.cle =INT 伽-d 30.6001D =b -d - INT 00.6001el FRAC I.JD 0.5】 日M =e1 12 INT le/14】(月)Y =c -4715 -IN"7 M 10(年)N =mod “NT JD+0.5】,7(星期几。N=0,星期一;N =1,星期二;.)2.2通用时与GPS时间问的相互转换2.2.1 由通用时转换到 GPS 时间(CommonTimeToGPSTime( pct, pgt主要分两步进行:第一步:计算GPS周GPSWEEK=INT JD-2444244.5 7第二步:计算一周内的秒数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时、儒略时、年积日时,并通过各个时间系统的各自相互转换,最后输 出的结果如下图所示TDocuments and SetiingBAdmini stratoFS ti meDebugW me.exe1转换之前的通用时(当地时间):2BM 1 6 19:38 =45.26 建用时儒略日的转换= 2455568 27525 0.26 儒略日-通用时的转换:2011 1 6 19:38:45-26 儒略日->GPS时的转换:161? 416325 0.26 卯$时-儒略日的转换= 24SSS68 27525 0*26 画用时_>GPS时的转换: 1617 416325 0.26 =P£ 时-, 通用时的转换= 2011 1 6 19:38:45.26 11用时一>年积日 宓日1© 6 7072S 0.2&年积日通用时:2010 1 6 19:38:45.26 泗时-,年积日德010 6 70725 0.26 年积日->GPS 时 T56S 329925 0.26 儒略日年积日湖 1© 6 70725 0.2& 年积日_>儒略日二24弱2国3 27525 0.26 经过各种转换后还原得到的通用时= 2010 16 19:38:45.26 Pfbww any 卜号¥ ctmtinue通过上图我们可以看出,得到的结果还是非常满意的,程序基本完成了各 个时间系统的相互转换,从各个时间相互转换后得到的时间结果,并还原成转换 前的数据,得到的结果都是完全符合,由此可见我们的计算结果是正确的,4. 心得体会这次编程试验,虽说这次试验比较简单,但还是花了较长的时间,修修改改 的,以前看到过类似程序,觉得自己应该没啥问题,应该很简单,自己能轻易拿 下,可真做起来并不是这么一回事,总是出现一些小bug,不知道问题出在那里, 明明感觉公式输入对的,语法也没啥问题,偏偏结果不对,与期望的值差别很大, 最后经过调试总算解决了这些问题,比如有次明明记得公式输入是正确的,最后 发现还是不小心输错了,结果导致错误。经过这次编程,这次试验,使自己的编 程水平有了较大的提高,以前很多的时候都是只看程序,感觉很简单,并不自己动手,其实其中很多问题,只有自己亲自经历才知道一些简单的东西也会出问题, 卡住思维,最后经过努力解决了问题,心里还是蛮开心的,有一定的成就感。经 过这次试验,学到了很多东西,有比较深的感触,对VC+不像以前那么排斥了, 不像以前总感觉有点儿惧怕它,现在总算不抵触他了,希望在以后的学习中能够 喜欢上它。5. 附录(程序中的源代码)#include<iostream>using namespace std;typedef struct tagCOMMONTIMEint year;int month;int day;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;MJULIANDAY;/ 新儒略日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;double FRAC(double morigin)return morigin-long(morigin);/ 取小数部分void CommonTimeToJulianDay(PCOMMONTIME pct,PJULIANDAY pjd) / 通 用时到儒略日的转换if(pct->year<1900)(if(pct->year<80)pct->year+=2000;else pct->year+=1900;double ut=pct->hour + pct->minute/60.0 + pct->second/3600.0;if(pct->month<=2)(pct->year-=1;pct->month+=12;pjd->day=int(365.25*pct->year)+int(30.6001*(pct->month+1)+pct->day+in t(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);int 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%7;void JulianDayToGPSTime(PJULIANDAY pjd,PGPSTIME pgt)/ 儒略日至U 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)/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 GPSTimeToCommonTime(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->second=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*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;PJULIANDAY 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)(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 (PGPSTIME 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, 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()PCOMMONTIME 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;coutvv”转换之前的通用时(当地时间):cout«pct->year«" "«pct->month«" "«pct->day«""«pct->hour«":"«pct->minute«":"«pct->second«endl;cout«endl;CommonTimeToJulianDay( pct, pjd);通用时->儒略日的转换 cout«"通用时->儒略日的转换:"cout«pjd->day«" "«pjd->tod.sn«" "«pjd->tod.tos«endl;cout«endl;JulianDayToCommonTime( pjd, pct);/儒略日->通用时的转换 coutvv”儒略日->通用时的转换:"cout«pct->year«" "«pct->month«" "«pct->day«""«pct->hour«":"«pct->minute«":"«pct->second«endl;cout«endl;JulianDayToGPSTime( pjd, pgt);/(需略日->GPS 时的转换 coutvv”儒略日->GPS时的转换:"cout«pgt->wn«" "«pgt->tow.sn«" "«pgt->tow.tos«endl;cout«endl;GPSTimeToJulianDay( pgt, pjd);/GPS时->儒略日的转换 cout«"GPS时->儒略日的转换:"cout«pjd->day«" "«pjd->tod.sn«" "«pjd->tod.tos«endl; cout«endl;CommonTimeToGPSTime( pct, pgt);/fi用时->GPS 时的转换 cout«"通用时->GPS时的转换:"cout«pgt->wn«" "«pgt->tow.sn«" "«pgt->tow.tos«endl;cout«endl;GPSTimeToCommonTime( pgt, pct);/GPS时->通用时的转换 cout«"GPS时->通用时的转换:"cout«pct->year«" "«pct->month«" "«pct->day«""«pct->hour«":"«pct->minute«":"«pct->second«endl;cout«endl;CommonTimeToDOY ( pct, pdoy);通用时->年积日 cout«"通用时->年积日:"cout«pdoy->year«" "«pdoy->day«" "«pdoy->tod.sn«""«pdoy->tod.tos«endl;cout«endl;DOYToCommonTime (pdoy, pct);/年积日->通用时 cout«"年积日->通用时:"cout«pct->year«" "«pct->month«" "«pct->day«""«pct->hour«":"«pct->minute«":"«pct->second«endl;cout«endl;GPSTimeToDOY ( pgt, pdoy);/GPS 时->年积日 cout«"GPS 时->年积日:"cout«pdoy->year«" "«pdoy->day«" "«pdoy->tod.sn«" "«pdoy->tod.tos«endl;cout«endl;DOYToGPSTime (pdoy, pgt);/年积日->GPS 时cout«"年积日->GPS 时:”;cout«pgt->wn«" "«pgt->tow.sn«" "«pgt->tow.tos«endl; cout«endl;JulianDayToDOY (pjd, pdoy);儒略日->年积日COUtVV”儒略日->年积日:"cout«pdoy->year«" "«pdoy->day«" "«pdoy->tod.sn«" "«pdoy->tod.tos«endl; cout«endl;DOYToJulianDay ( pdoy, pjd);/年积日->儒略日cout«"年积日->儒略日:”;cout«pjd->day«" "«pjd->tod.sn«" "«pjd->tod.tos«endl;cout«endl;cout«"经过各种转换后还原得到的通用时:”;cout«pct->year«" "«pct->month«" "«pct->day«" "«pct->hour«":"«pct->minute«":"«pct->second«endl;cout«endl;

    注意事项

    本文(空间大地测量与GPS导航定位时间系统相互转换,格里高利时通用时儒略日,GPS时,年积日相互转换的源代码程序.docx)为本站会员(scccc)主动上传,三一文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一文库(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    经营许可证编号:宁ICP备18001539号-1

    三一文库
    收起
    展开