空間大地測量與GPS導(dǎo)航定位時間系統(tǒng)相互轉(zhuǎn)換,格里高利時通用時儒略日,GPS時,年積日相互轉(zhuǎn)換的源代碼程序_第1頁
空間大地測量與GPS導(dǎo)航定位時間系統(tǒng)相互轉(zhuǎn)換,格里高利時通用時儒略日,GPS時,年積日相互轉(zhuǎn)換的源代碼程序_第2頁
空間大地測量與GPS導(dǎo)航定位時間系統(tǒng)相互轉(zhuǎn)換,格里高利時通用時儒略日,GPS時,年積日相互轉(zhuǎn)換的源代碼程序_第3頁
空間大地測量與GPS導(dǎo)航定位時間系統(tǒng)相互轉(zhuǎn)換,格里高利時通用時儒略日,GPS時,年積日相互轉(zhuǎn)換的源代碼程序_第4頁
空間大地測量與GPS導(dǎo)航定位時間系統(tǒng)相互轉(zhuǎn)換,格里高利時通用時儒略日,GPS時,年積日相互轉(zhuǎn)換的源代碼程序_第5頁
已閱讀5頁,還剩9頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、進行空間大地測量所需時間系統(tǒng)的相互轉(zhuǎn)換1.時間標示法從古至今,世界各國曾出現(xiàn)過多種歷法,如羅馬歷、儒略日、格里高利以及我國的農(nóng)歷等,目前世界上廣泛采用的歷法是格里高利歷。1.1.格里高利時(通用時)格里高利歷也稱公歷, 現(xiàn)被世界各國廣泛采用。 格里高利歷是一個由146097天所組成的 400 年周期為基礎(chǔ), 1 年的平均長度為365.2425天。根據(jù)格里高利歷1 年被劃分為 12 個月。其標示時間時采用年、月、日、時、分、秒的方法。這種計時反映季節(jié)變化, 與日常生活密切相關(guān), 但非連續(xù), 不利于數(shù)學(xué)表達和科學(xué)計算1.2.儒略日儒略日是一種不涉及年、 月等概念的長期連續(xù)的記日法,在天文學(xué)、 空間

2、大地測量和衛(wèi)星導(dǎo)航定位中經(jīng)常使用。這種方法是有scaliger 與 1583 年提出的,為紀念他的父親儒略而命名為儒略日。儒略日的起點訂在公元前4713 年(天文學(xué)上記為-4712 年) 1 月 1 日格林威治時間平午(世界時12:00) ,即 jd 0 指定為4713 b.c. 1 月 1 日 12:00 ut 到 4713 b.c. 1 月 2 日 12:00 ut 的24 小時。每一天賦予了一個唯一的數(shù)字。由于儒略日數(shù)字位數(shù)太多,國際天文學(xué)聯(lián)合會于1973 年采用簡化儒略日(mjd) ,其定義為mjd = jd - 2400000.5。mjd 相應(yīng)的起點是1858 年 11 月 17 日

3、世界時0 時。 例如 1979年 10 月 1 日零時儒略日數(shù)為2,444,147.5 。1.3.gps 時gps 系統(tǒng)內(nèi)部所采用的時間系統(tǒng)是gps 時間,gps 時以 1980 年 1 月 6日子夜為起點,用周數(shù)(一個星期七天)和周內(nèi)的秒數(shù)來表示1.4.年積日所謂年積日就是指的是從每年的1 月 1 日起開始累計的天數(shù),計數(shù)從 1開始(即每年1 月 1 日的年積日為1) ,如 2004 年 5 月 1 日的年積日為122。用他可以方便的求出一年內(nèi)兩個時刻t1 和 t2 間的時間間隔。2.各個時間系統(tǒng)的相互轉(zhuǎn)換各個時間系統(tǒng)都有嚴格的轉(zhuǎn)換公式,其轉(zhuǎn)換的主要思想是把通用時、gps 時間、和年積日分別

4、轉(zhuǎn)換為儒略日,然后以儒略日為媒介,實現(xiàn)任意兩個時間系統(tǒng)的相互轉(zhuǎn)換,如下圖所示:轉(zhuǎn)換思想2.1 通用時與儒略日間的相互轉(zhuǎn)換2.1.1由通用時轉(zhuǎn)換到儒略日(commontimetojulianday( pct, pjd))其中如果 m 2, 則 y=y-1,m=m+12 如果 m2 ,則 y=y,m=m jd為儒略日, y為年, m為月, d為日, ut為世界時。2.1.2 由儒略日轉(zhuǎn)換到通用時(juliandaytocommontime( pjd, pct))2.2 通用時與 gps時間間的相互轉(zhuǎn)換通用時儒略日gps時年積日int365.25int30.60011241720981.5jdymd

5、utint0.51537int122.1365.25int 365.25.cint30.6001int 30.6001frac0.51 12 int144715int710mod int0.5 ,70,1,.ajdbacbdebddbdejdmeeycmnjdnn日月年星期幾。星期一;星期二;2.2.1由通用時轉(zhuǎn)換到gps 時間( commontimetogpstime( pct, pgt) )主要分兩步進行:第一步:計算 gps周第二步:計算一周內(nèi)的秒數(shù)2.2.2由 gps 時間轉(zhuǎn)換到通用時( gpstimetocommontime( pgt, pct) )第一步:由 gps時間轉(zhuǎn)換到儒略日

6、第二步:由儒略日轉(zhuǎn)換到通用時2.3 儒略日與年積日之間的相互轉(zhuǎn)換2.3.1 由儒略日轉(zhuǎn)換到年積日(juliandaytodoy (pjd, pdoy) 主要分三步進行:第一步:計算出通用時第二步:計算出當年1 月 1 日的儒略日第三步:兩個儒略日求差加1,得出年積日2.3.2 年積日轉(zhuǎn)換到儒略日 (doytojulianday ( pdoy, pjd) 主要分一下兩步進行:第一步:計算出當年1 月 1 日的儒略日 jd1 第二步:年積日加jd1 減 1 得儒略日2.4gps 時與年積日間的相互轉(zhuǎn)換參照儒略日與年積日之間轉(zhuǎn)換方法進行就可以得到結(jié)果。gps 時轉(zhuǎn)換到年積日( gpstimetodo

7、y ( pgt, pdoy))年積日轉(zhuǎn)換到gps時(doytogpstime (pdoy, pgt))3.算例及結(jié)果通過在 vc+6.0 環(huán)境下編寫了各個坐標系統(tǒng)的相互轉(zhuǎn)換,并得到了轉(zhuǎn)換的結(jié)果,在試驗中使用的已知數(shù)據(jù)是即使數(shù)據(jù),取的時間是當時時間2011年 1 月7 日 19 時 38 分 45.26 秒,用這個已知數(shù)據(jù)代入函數(shù)中,分別求得各個時間系統(tǒng)的 gps 時、儒略時、年積日時,并通過各個時間系統(tǒng)的各自相互轉(zhuǎn)換,最后輸出的結(jié)果如下圖所示int2444244.57gps weekjd通過上圖我們可以看出,得到的結(jié)果還是非常滿意的,程序基本完成了各個時間系統(tǒng)的相互轉(zhuǎn)換, 從各個時間相互轉(zhuǎn)換后

8、得到的時間結(jié)果,并還原成轉(zhuǎn)換前的數(shù)據(jù),得到的結(jié)果都是完全符合,由此可見我們的計算結(jié)果是正確的,4.心得體會這次編程試驗, 雖說這次試驗比較簡單, 但還是花了較長的時間, 修修改改的,以前看到過類似程序,覺得自己應(yīng)該沒啥問題,應(yīng)該很簡單,自己能輕易拿下,可真做起來并不是這么一回事, 總是出現(xiàn)一些小 bug,不知道問題出在那里,明明感覺公式輸入對的, 語法也沒啥問題, 偏偏結(jié)果不對, 與期望的值差別很大,最后經(jīng)過調(diào)試總算解決了這些問題,比如有次明明記得公式輸入是正確的,最后發(fā)現(xiàn)還是不小心輸錯了,結(jié)果導(dǎo)致錯誤。經(jīng)過這次編程,這次試驗,使自己的編程水平有了較大的提高, 以前很多的時候都是只看程序,感覺

9、很簡單, 并不自己動手, 其實其中很多問題,只有自己親自經(jīng)歷才知道一些簡單的東西也會出問題,卡住思維,最后經(jīng)過努力解決了問題,心里還是蠻開心的,有一定的成就感。經(jīng)過這次試驗, 學(xué)到了很多東西, 有比較深的感觸, 對 vc+不像以前那么排斥了,不像以前總感覺有點兒懼怕它, 現(xiàn)在總算不抵觸他了, 希望在以后的學(xué)習(xí)中能夠喜歡上它。5.附錄(程序中的源代碼)#include using namespace std; typedef struct tagcommontime int year; int month; int day; int hour; int minute; double second

10、; commontime;/ 通用時typedef commontime *pcommontime; typedef struct tagtod long sn; /秒數(shù)的整數(shù)部分double tos;/秒數(shù)的小數(shù)部分tod; typedef tod *ptod; typedef struct long day; /整數(shù)天數(shù)tod tod; /一天內(nèi)的秒數(shù)julianday;/ 儒略日typedef julianday *pjulianday; typedef struct tagmjulianday long day; tod tod; mjulianday;/ 新儒略日typedef mj

11、ulianday *pmjianday; typedef struct tagtow long sn;/秒整數(shù)部分double tos;/秒小數(shù)部分tow; typedef tow *ptow; typedef struct taggpstime int wn; /周數(shù)tow tow;/一周內(nèi)的秒數(shù)gpstime;/gps 時typedef gpstime *pgpstime; typedef struct tagdoy unsigned short year; unsigned short day; tod tod; doy;/ 年積日typedef doy *pdoy; double fr

12、ac(double morigin) return morigin-long(morigin);/ 取小數(shù)部分 void commontimetojulianday(pcommontime pct,pjulianday pjd) /通用時到儒略日的轉(zhuǎn)換 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)+in

13、t(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;/ 秒的整數(shù)部分pjd-tod.tos=pct-second-(int)pct-second;/ 秒的小數(shù)部分 void juliandaytocommontime(pjulianday pjd,pcommontime pct)/儒略日到通用時的轉(zhuǎn)換 double x=pjd-day+(pjd-tod.sn+pjd-tod.tos)/(60.0*60.0*24

14、); 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-t

15、od.tos; int n=a%7; void juliandaytogpstime(pjulianday pjd,pgpstime pgt)/ 儒略日到 gps時的轉(zhuǎn)換 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(pgpst

16、ime pgt,pjulianday pjd)/gps 時到儒略日的轉(zhuǎn)換 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時的轉(zhuǎn)換 pjulianday pjd=new julianday; commontimetojulianday(pct,pjd); juliandayto

17、gpstime(pjd,pgt); void gpstimetocommontime(pgpstime pgt,pcommontime pct)/gps時到通用時的轉(zhuǎn)換 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-da

18、y=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-jd

19、o+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;

20、 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

21、.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-s

22、econd=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 pg

23、t) 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

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論