空间大地测量与GPS导航定位时间系统相互转换,格里高利时通用时儒略日,GPS时,年积日相互转换讲解
GPS大地测量坐标系统及高程系统转换

学院:武汉大学班级学号: 7学生姓名:程卫旗指导教师:黄声享武汉大学摘要GPS( Global Positioning System) 测量具有全天候、快速、经济等诸多优点,但是长期以来,工程应用领域只是利用了GPS 测量中的平面位置信息,浪费掉了高程信息,也就是没有充分利用并开发GPS 资源。
如果GPS 水准方法在一定范围内可替代低等级几何水准测量,不仅可以获得可观的经济效益,而且也为通过GPS 测量确定大地水准面的研究提供了参考。
因此, GPS 测定正常高的研究具有一定的科学价值及现实意义。
GPS观测数据经处理后,可以得到两点间基线向量及高精度大地高差,若已知一点大地高,便可求得全网任一点的大地高。
大地高是以椭球面为基准的高程系统,而我国采用的是以似大地水准面为基准的正常高系统,因此,需将大地高转换为正常高。
关键词:GPS,高程系统转换- 1 -目录1 绪论........................................ 错误!未定义书签。
1.1引言 .................................... 错误!未定义书签。
1.2GPS全球定位系统简介 .................... 错误!未定义书签。
1.3GPS系统发展现状 ........................ 错误!未定义书签。
1.4我国高程系统现状........................ 错误!未定义书签。
1.5GPS高程转换概况 ........................ 错误!未定义书签。
1.6本论文所研究的内容...................... 错误!未定义书签。
2 高程基准起算面及其相互关系.................. 错误!未定义书签。
2.1平均海平面与高程基准面.................. 错误!未定义书签。
2.2大地水准面与似大地水准面................ 错误!未定义书签。
GLONASS与GPS在时间上的统一

GLONASS与GPS在时间上的统一作者:姬云鹏吴玉斌宗明杰来源:《数字技术与应用》2011年第08期摘要:介绍了两大全球定位系统GLONASS和GPS组合导航时如何在时间上的统一关键词:GLONASS GPS 时间统一中图分类号: P228 文献标识码:A 文章编号:1007-9416(2011)08-0222-011、时间系统卫星定位是指通过接收和处理导航卫星发射的信号,来确定用户接收机(或测站)至卫星间的距离(或距离差),进而确定位置。
因此,准确地测定测站至卫星间的距离,就必须精密地测定信号的传播时间。
如果要求上述距离误差小于1cm,则信号传播时间的测定误差应不超过3×10-11秒。
由于卫星到接收机之间的信号是单向传播,要获得高精度的时间信息,时间基准的精确定义以及卫星与地面接收机的时间同步是至关重要的。
与卫星定位有关的时间系统可分为世界时和原子时两大类,GLONASS与GPS时间系统均属于原子时系统,本文主要对与GPS和GLONASS相关的原子时及其之间的转换关系进行分析与讨论。
2、原子时系统原子时(Atomic Time,简称AT)秒长的定义是:位于海平面上的铯-133原子基态的两个超精细能级间在零磁场下跃迁辐射9192631770周所持续的时间,为一原子时秒,该原子秒被作为国际制秒(SI)的时间单位,这是一种均匀的时间计量系统。
2.1 国际原子时与协调世界时卫星测量学通常采用原子时(AT)作为高精度时间基准。
许多国家都建立了自己的原子时系统,但不同的地方原子时之间存在着必然的差异,为此,为了创建一个统一的原子时系统,国际上大约200座原子钟,产生的原子时,进行加权平均,进而形成了统一的原子时系统,称为国际原子时(TAI)。
1972年,国际原子时成为了建立协调世界时(UTC)的国际标准,协调世界时实际上是世界时和国际原子时之间的一种折中方案,协调时的秒长严格等于SI,采用闰秒(或称跳秒)的办法,使协调时与世界时的时刻相接近。
关于GPS测量中坐标的转换过程论述

关于GPS测量中坐标的转换过程论述摘要:GPS是工程测量中不可缺少的仪器,本文介绍将GPS所采集到的坐标转换成工程所需坐标的过程,供同行参考。
关键词:GPS;坐标系统;转换1 概述GPS以测量精度高、操作简便、仪器体积小、便于携带、全天候操作、观测点之间无须通视、测量结果统一在WGS一84坐标下,信息自动接收、存储,减少繁琐的中间处理环节、高效益等显著特点,赢得广大测绘工作者的信赖。
GPS使用的是地心地固坐标系统,而我国绝大多数应用都集中在各种参心坐标系统上,显然必须解决两种不同的空间坐标系的转换才能更好的发挥GPS的作用。
2 我国测绘中常用的坐标系统2.1 1954年北京坐标系归结其要点为:1.1954年北京坐标系的参考椭球是属于克拉索夫斯基椭球常用基本参数如下:长半轴a=6378245m 4±2m,扁率f=1:298.32.1954北京坐标系的大地原点在前苏联的普尔科夫;3.采用多点定位进行了椭球定位;(1)高程基准为1956年青岛验潮站求出的黄海平均海水面;(2)高程异常以前苏联1955年大地水准面重新平差结果为起算数据,按我国天文水准路线推算而得。
我国地形图上的平面坐标位置都是以这个数据为基准推算的。
2.2 1980西安坐标系归结1980西安坐标系的要点为:1.该坐标系大地原点定在我国中部,即陕西省泾阳县永乐镇。
2.采用IAG 1975年推荐的地球椭球参数:长半轴a=6378140m扁率f=1:298.2573.定向明确:1980年国家大地坐标系的椭球短轴平行于地球质心指向地极原点JYD(1968.0)方向,起始大地子午面平行于格林尼治平均天文台的子午面;4.椭球定位参数以我国范围内高程异常值平方和等于最小为条件求定;5.大地点高程以1956年青岛验潮站求出的黄海平均海水面为基准;6.建立两套1980年国家大地坐标系和地心坐标系。
前者是在后者的基础上通过精确求定位坐标变化参数,换算成地心坐标。
时间转换--年积日-儒略日-GPS周

%start from Julian March 1, 4801 B.C. if( J < 2299160.5 ) % before 1582.10.4. 24:00 is Julian calender j0=floor(J+0.5); dd=J+0.5-j0; else % after 1582.10.15. 00:00 is Gregorian calender %number of certury years that are not leap year n1=floor((J-2342031.5)/36524.25/4)+1; %1700.3.1.0 n2=floor((J-2378555.5)/36524.25/4)+1; %1800.3.1.0 n3=floor((J-2415079.5)/36524.25/4)+1; %1900.3.1.0 j0=n1+n2+n3+J+10; dd=j0+0.5-floor(j0+0.5); j0=floor(j0+0.5); end
三、程序实现成果(具体代码见附件) 1. gps2cal 将 GPS 周和周内秒转换到公历时间
function cal=gps2cal(gpst) % gps2cal 将 GPS 周和周内的秒转换到公历 GPS 时间 % cal=gps2cal(week,sec) 返回的公历是 1x6 矩阵,6 列分别为年月日时分秒 % gpst:1x2 矩阵,2 列分别为 GPS 周和周内的秒 % GPS 从 MJD44244 开始 mjd=44244+(gpst(1)*86400*7+gpst(2))/86400; cal=mjd2cal(mjd);
时间转换--年积日-儒略日-GPS周

4. mjd2cal 将简化儒略日转换到公历时间
function cal=mjd2cal(mjd) % mjd2cal 将简化儒略日转换到公历年月日时分秒。 % cal=mjd2cal(mjd) 返回的 cal 是 1x6 矩阵,6 列分别为年月日时分秒 % mjd:简化儒略日 jd=mjd+2400000.5; cal=jd2cal(jd);
2. gps2cal1 由公历日期和 GPS 周内秒计算公历时间
function cal=gps2cal1(date,tow) % gps2cal1 由公历日期和 gps 周内秒计算公历 GPS 时间 % cal=gps2cal1(date,tow) 返回的公历是 1x6 矩阵,6 列分别为年月日时分秒 % date:1x3 矩阵,3 列分别为公历年月日 % tow:GPS 周内秒 mjd=cal2mjd(date); % GPS 从 MJD44244 开始 week=floor((mjd-44244)/7); cal=gps2cal([week,tow]);
end if themonth>=3 juliaday=juliaday+1; end end mjd(1)=theyear; mjd(2)=juliaday; 日
%当月份大于 2 月时,在平年的ulian
6. jd2cal 从儒略日计算公历时间
else leap=1; end end %%%%%%采用平年的日历,按 1-12 月分月计算 julian 日期 if themonth==1 juliaday=theday; end if themonth==2 juliaday=theday+31; end if themonth==3 juliaday=theday+59; end if themonth==4 juliaday=theday+90; end if themonth==5 juliaday=theday+120; end if themonth==6 juliaday=theday+151; end if themonth==7 juliaday=theday+181; end if themonth==8 juliaday=theday+212; end if themonth==9 juliaday=theday+243; end if themonth==10 juliaday=theday+273; end if themonth==11 juliaday=theday+304; end if themonth==12 juliaday=theday+334; end if leap==1 if themonth<=2 %如果是闰年,当月份小于 2 月时,julian 日期与平年相同 juliaday=juliaday; %其他情况是闰年
如何进行大地测量与坐标系统的转换

如何进行大地测量与坐标系统的转换大地测量与坐标系统的转换是地理信息系统(GIS)中非常重要的一部分。
在现代社会中,人们对地球上的各种地理现象有着越来越多的需求,需要进行准确的测量和坐标系统转换。
这种转换涉及到地球的形状、坐标系统以及测量方法。
本文将探讨如何进行大地测量和坐标系统的转换。
大地测量是测量地球表面地形和地理要素的科学。
在大地测量中,我们使用测量仪器测量地球上的点的水平和垂直位置,以确定它们的坐标。
这些坐标可以表示为经度、纬度和高程。
然而,由于地球并非完全规则的椭球体,其形状存在很多不规则性,因此在测量时需要考虑地球的形状。
这就引出了椭球体模型。
椭球体模型是一种近似地球形状的数学模型,通过确定椭球的参数可以实现对地球形状的准确描述。
在测量中,我们通常使用球面三角学来计算地球上两点之间的距离和方向。
球面三角学基于椭球体模型,它考虑了地球外形的不规则性,以便得到较为准确的测量结果。
然而,由于地球表面的不规则性,我们需要使用一个统一的坐标系统来描述地球上的点。
这就需要进行坐标系统的转换。
坐标系统的转换涉及到将大地测量的结果转换为不同的坐标系统,例如经纬度、UTM(通用横轴墨卡托)等。
在进行坐标系统转换时,我们需要考虑到各个坐标系统之间的差异。
不同的坐标系统可能使用不同的基准面和投影方式,因此我们需要进行相应的转换操作。
常见的大地测量坐标系统转换方法包括七参数法、四参数法等。
这些方法通过计算不同坐标系之间的参数关系,实现了坐标的转换。
此外,我们还需要考虑到坐标系统的精度问题。
坐标系统的转换可能会引入误差,因此我们需要评估和控制误差,以保证转换结果的准确性。
这可以通过测量数据的质量控制和精度评估来实现。
总之,大地测量与坐标系统的转换是地理信息系统中的重要组成部分。
它们为地球上各种地理现象的测量和分析提供了基础。
通过研究地球的形状、使用适当的坐标系统和进行合理的坐标系统转换,我们可以获得准确的测量结果,并在GIS应用中得到更加可靠和准确的地理信息。
《GPS原理及其应用》习题

《GPS原理及其应用》习题集第一章思考题[1]名词解释:天球;赤经;赤纬;黄道;春分点;岁差;章动;极移;世界时;原子时;协调世界时;儒略日。
[2]简述卫星大地测量的发展历史,并指出其各个发展阶段的特点。
[3]试说明GPS全球定位系统的组成。
[4]为什么说GPS卫星定位测量技术问世是测绘技术发展史上的一场革命?[5]简述GPS、GLONASS与NA VSAT三种卫星导航定位系统工作卫星星座的主要参数。
[6]简述(历元)平天球坐标系、(观测)平天球坐标系以及瞬时极(真)天球坐标系之间的差别。
[7]怎样进行岁差旋转与章动旋转?它们有什么作用?[8]为什么要进行极移旋转?怎样进行极移旋转?[9]简述协议地球坐标系的定义。
[10]试写出由大地坐标到地心空间直角坐标的变换过程。
[11]综述由(历元)平天球坐标系到协议地球坐标系的变换过程。
[12]简述恒星时、真太阳时与平太阳时的定义。
[13]什么是GPS定位测量采用的时间系统?它与协调世界时UTC有什么区别?[14]试述描述GPS卫星正常轨道运动的开普勒三大定律。
[15]试画图并用文字说明开普勒轨道6参数。
[16]简述地球人造卫星轨道运动所受到的各种摄动力。
[17]地球引力场摄动力对卫星的轨道运动有什么影响?[18]日、月引力对卫星的轨道运动有什么影响?[19]简述太阳光压产生的摄动力加速度,并说明它对卫星轨道运动有何影响?[20]综述考虑摄动力影响的GPS卫星轨道参数。
[21]试写出计算GPS卫星瞬时位置的步骤。
第二章思考题[1]名词解释:码;码元(比特);数码率;自相关系数;信号调制;信号解调;SA技术。
[2]试说明什么是随机噪声码?什么是伪随机噪声码?[3]C/A码和P码是怎样产生的?[4]试述C/A码和P码的特点。
[5]试述伪随机噪声码测距原理。
[6]试述导航电文的组成格式。
[7]名词解释:遥测字;交接字;数据龄期;时延差改正;传输参数。
[8]简述导航电文数据块Ⅱ的主要内容。
空间大地测量与GPS导航定位时间系统相互转换,格里高利时通用时儒略日,GPS时,年积日相互转换资料

进行空间大地测量所需时间系统的相互转换1.时间标示法从古至今,世界各国曾出现过多种历法,如罗马历、儒略日、格里高利以及我国的农历等,目前世界上广泛采用的历法是格里高利历。
1.1.格里高利时(通用时)格里高利历也称公历,现被世界各国广泛采用。
格里高利历是一个由146097天所组成的400年周期为基础,1年的平均长度为365.2425天。
根据格里高利历1年被划分为12个月。
其标示时间时采用年、月、日、时、分、秒的方法。
这种计时反映季节变化,与日常生活密切相关,但非连续,不利于数学表达和科学计算1.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日零时儒略日数为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))其中如果M ≤2,则y=Y-1,m=M+12如果M>2,则y=Y ,m=MJD 为儒略日,Y 为年,M 为月,D 为日,UT 为世界时。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
进行空间大地测量所需时间系统的相互转换1.时间标示法从古至今,世界各国曾出现过多种历法,如罗马历、儒略日、格里高利以及我国的农历等,目前世界上广泛采用的历法是格里高利历。
1.1.格里高利时(通用时)格里高利历也称公历,现被世界各国广泛采用。
格里高利历是一个由146097天所组成的400年周期为基础,1年的平均长度为365.2425天。
根据格里高利历1年被划分为12个月。
其标示时间时采用年、月、日、时、分、秒的方法。
这种计时反映季节变化,与日常生活密切相关,但非连续,不利于数学表达和科学计算1.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日零时儒略日数为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))其中如果M ≤2,则y=Y-1,m=M+12如果M>2,则y=Y ,m=MJD 为儒略日,Y 为年,M 为月,D 为日,UT 为世界时。
2.1.2由儒略日转换到通用时(JulianDayToCommonTime( pjd, pct))2.2通用时与GPS 时间间的相互转换[]()INT 365.25INT 30.60011241720981.5JD y m D UT =++⎡⎤⎣⎦+++[]()[]()[][]()[]()()()[]{}()INT 0.51537INT 122.1INT 365.25.c INT 30.6001INT 30.6001FRAC 0.5112INT 144715INT 710mod INT 0.5,70,1,...a JD b a c b d e b d D b d e JD M e e Y c M N JD N N =+=+=-⎡⎤⎣⎦==-⎡⎤⎣⎦=--++=--⋅=--+⎡⎤⎣⎦=+==日月年星期几。
星期一;星期二;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 时、儒略时、年积日时,并通过各个时间系统的各自相互转换,最后输出的结果如下图所示()INT 2444244.5GPS WEEK JD =-⎡⎤⎣⎦通过上图我们可以看出,得到的结果还是非常满意的,程序基本完成了各个时间系统的相互转换,从各个时间相互转换后得到的时间结果,并还原成转换前的数据,得到的结果都是完全符合,由此可见我们的计算结果是正确的,4.心得体会这次编程试验,虽说这次试验比较简单,但还是花了较长的时间,修修改改的,以前看到过类似程序,觉得自己应该没啥问题,应该很简单,自己能轻易拿下,可真做起来并不是这么一回事,总是出现一些小bug,不知道问题出在那里,明明感觉公式输入对的,语法也没啥问题,偏偏结果不对,与期望的值差别很大,最后经过调试总算解决了这些问题,比如有次明明记得公式输入是正确的,最后发现还是不小心输错了,结果导致错误。
经过这次编程,这次试验,使自己的编程水平有了较大的提高,以前很多的时候都是只看程序,感觉很简单,并不自己动手,其实其中很多问题,只有自己亲自经历才知道一些简单的东西也会出问题,卡住思维,最后经过努力解决了问题,心里还是蛮开心的,有一定的成就感。
经过这次试验,学到了很多东西,有比较深的感触,对VC++不像以前那么排斥了,不像以前总感觉有点儿惧怕它,现在总算不抵触他了,希望在以后的学习中能够喜欢上它。
5.附录(程序中的源代码)#include<iostream>using namespace std;typedef struct tagCOMMONTIME{int year;int month;int day;int hour;int minute;double second;}COMMONTIME;//通用时typedef COMMONTIME *PCOMMONTIME;typedef struct tagTOD{long sn; //秒数的整数部分double tos;//秒数的小数部分}TOD;typedef TOD *PTOD;typedef struct{long day; //整数天数TOD tod; //一天内的秒数}JULIANDAY;//儒略日typedef JULIANDAY *PJULIANDAY;typedef struct tagMJULIANDAY{long day;TOD tod;}MJULIANDAY;//新儒略日typedef MJULIANDAY *PMJIANDAY;typedef struct tagTOW{long sn;//秒整数部分double tos;//秒小数部分}TOW;typedef TOW *PTOW;typedef struct tagGPSTIME{int wn; //周数TOW tow;//一周内的秒数}GPSTIME;//GPS时typedef GPSTIME *PGPSTIME;typedef struct tagDOY{unsigned 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)//儒略日到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;cout<<"转换之前的通用时(当地时间):";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);//儒略日->通用时的转换cout<<"儒略日->通用时的转换:";cout<<pct->year<<" "<<pct->month<<" "<<pct->day<<" "<<pct->hour<<":"<<pct->minute<<":"<<pct->second<<endl;cout<<endl;JulianDayToGPSTime( pjd, pgt);//儒略日->GPS时的转换cout<<"儒略日->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);//通用时->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);//儒略日->年积日cout<<"儒略日->年积日:";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;}。