VC實(shí)現(xiàn)GPS定位信息的接收及對各定位參數(shù)數(shù)據(jù)的提取方法_第1頁
VC實(shí)現(xiàn)GPS定位信息的接收及對各定位參數(shù)數(shù)據(jù)的提取方法_第2頁
VC實(shí)現(xiàn)GPS定位信息的接收及對各定位參數(shù)數(shù)據(jù)的提取方法_第3頁
VC實(shí)現(xiàn)GPS定位信息的接收及對各定位參數(shù)數(shù)據(jù)的提取方法_第4頁
VC實(shí)現(xiàn)GPS定位信息的接收及對各定位參數(shù)數(shù)據(jù)的提取方法_第5頁
全文預(yù)覽已結(jié)束

下載本文檔

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

文檔簡介

1、本文結(jié)合主要的相關(guān)程序代碼對GPS全球定位系統(tǒng)的定位導(dǎo)航信息的接收和參數(shù)數(shù)據(jù)的提取進(jìn)行了討論,同時(shí)也對串口程序設(shè)計(jì)作了簡要的講述。通過本文的設(shè)計(jì)方法可以將GPS定位導(dǎo)航信息從GPS接收機(jī)完整接收,通過對定位參數(shù)的提取可將其應(yīng)用于其他高層應(yīng)用決策如各種GIS、RS系統(tǒng)等。本文提出了一種在VC下實(shí)現(xiàn)對GPS全球定位系統(tǒng)定位信息的接收以及對各定位參數(shù)數(shù)據(jù)的提取方法。我國也于2000年10月31日和12月21日成功發(fā)射了第一顆和第二顆導(dǎo)航定位試驗(yàn)衛(wèi)星并建立了我國第一代衛(wèi)星導(dǎo)航定位系統(tǒng)-"北斗導(dǎo)航系統(tǒng)",但由于起步晚也沒有得到廣泛應(yīng)用。目前在我國應(yīng)用最多的還是美國的GPS系統(tǒng)。本文就

2、針對當(dāng)前比較普及的GPS系統(tǒng),對其衛(wèi)星定位信息的接收及其定位參數(shù)提取的實(shí)現(xiàn)方法予以介紹。衛(wèi)星導(dǎo)航技術(shù)的飛速發(fā)展已逐漸取代了無線電導(dǎo)航、天文導(dǎo)航等傳統(tǒng)導(dǎo)航技術(shù),而成為一種普遍采用的導(dǎo)航定位技術(shù),并在精度、實(shí)時(shí)性、全天候等方面取得了長足進(jìn)步?,F(xiàn)不僅應(yīng)用于物理勘探、電離層測量和航天器導(dǎo)航等諸多民用領(lǐng)域,在軍事領(lǐng)域更是取得了廣泛的應(yīng)用-在彈道導(dǎo)彈、野戰(zhàn)指揮系統(tǒng)、精確彈道測量以及軍用地圖快速測繪等領(lǐng)域均大量采用了衛(wèi)星導(dǎo)航定位技術(shù)。有鑒于衛(wèi)星導(dǎo)航技術(shù)在民用和軍事領(lǐng)域的重要意義,使其得到了許多國家的關(guān)注。定位信息的接收通常GPS定位信息接收系統(tǒng)主要由GPS接收天線、變頻器、信號通道、微處理器、存儲(chǔ)器以及電源

3、等部分組成。由于GPS定位信息內(nèi)容較少,因此多用RS-232串口將定位信息(NEMA0183語句)從GPS接收機(jī)傳送到計(jì)算機(jī)中進(jìn)行信息提取處理。從串口讀取數(shù)據(jù)有多種方法,在此直接使用 Win32 API函數(shù)對其進(jìn)行編程處理。在Windows下不允許直接對硬件端口進(jìn)行控制操作,所有的端口均被視為"文件",因此在對串口進(jìn)行偵聽之前需要通過打開文件來打開串口,并對其進(jìn)行相關(guān)參數(shù)配置:m_hCom=CreateFile("COM1",GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING, FILE_FLAG_OVERLA

4、PPED,NULL); file:/以異步方式打開COM1口SetCommMask (m_hCom, EV_RXCHAR ) ; file:/添加或修改Windows所報(bào)告的事件列表SetupComm (m_hCom,READBUFLEN/*讀緩沖*/,WRITEBUFLEN/*寫緩沖*/); / 初始化通訊設(shè)備參數(shù) / 清除緩沖信息PurgeComm (m_hCom, PURGE_TXABORT | PURGE_RXABORT | PURGE_TXCLEAR | PURGE_RXCLEAR) ;/ 對異步I/O進(jìn)行設(shè)置CommTimeOuts.ReadIntervalTimeout = MA

5、XDWORD ; file:/接收兩連續(xù)字節(jié)的最大時(shí)間間隔CommTimeOuts.ReadTotalTimeoutMultiplier =0; file:/接收每字節(jié)的平均允許時(shí)間 CommTimeOuts.ReadTotalTimeoutConstant = 0 ; file:/接收時(shí)間常數(shù)SetCommTimeouts (m_hCom , &CommTimeOuts) ;file:/獲取并設(shè)置串口GetCommState ( m_hCom, &dcb) ;dcb.BaudRate = CBR_4800;dcb.ByteSize = 8;dcb.Parity = ODDPA

6、RITY;dcb.StopBits = ONESTOPBIT ; SetCommState( m_hCom, &dcb);  在成功打開并設(shè)置通訊口后,可采取輪詢串口和事件觸發(fā)兩種方式對數(shù)據(jù)進(jìn)行接收處理,本文在此采取效率比較高的事件觸發(fā)方式進(jìn)行接收處理,通過等待EV_RXCHAR事件的發(fā)生來啟動(dòng)ReadFile函數(shù)完成對GPS定位信息的接收:while(true)WaitCommEvent (m_hCom,&dwEvtMask,NULL); if (dwEvtMask&EV_RXCHAR = EV_RXCHAR)if(ComStat.cbInQue>0)

7、 ReadFile(m_hCom,m_readbuf,ComStat.cbInQue,&nLength,&olRead); 提取定位數(shù)據(jù)GPS接收機(jī)只要處于工作狀態(tài)就會(huì)源源不斷地把接收并計(jì)算出的GPS導(dǎo)航定位信息通過串口傳送到計(jì)算機(jī)中。前面的代碼只負(fù)責(zé)從串口接收數(shù)據(jù)并將其放置于緩存,在沒有進(jìn)一步處理之前緩存中是一長串字節(jié)流,這些信息在沒有經(jīng)過分類提取之前是無法加以利用的。因此,必須通過程序?qū)⒏鱾€(gè)字段的信息從緩存字節(jié)流中提取出來,將其轉(zhuǎn)化成有實(shí)際意義的,可供高層決策使用的定位信息數(shù)據(jù)。同其他通訊協(xié)議類似,對GPS進(jìn)行信息提取必須首先明確其幀結(jié)構(gòu),然后才能根據(jù)其結(jié)構(gòu)完成對各定位信息

8、的提取。對于本文所使用的GARMIN GPS天線板,其發(fā)送到計(jì)算機(jī)的數(shù)據(jù)主要由幀頭、幀尾等。這些幀頭標(biāo)識了后續(xù)幀內(nèi)數(shù)據(jù)的組成結(jié)構(gòu),各幀均以回車符和換行符作為幀尾標(biāo)識一幀的結(jié)束。對于通常的情況,我們所關(guān)心的定位數(shù)據(jù)如經(jīng)緯度、速度、時(shí)間等均可以從"$GPRMC"幀中獲取得到,該幀的結(jié)構(gòu)及各字段釋義如下:$GPRMC,<1>,<2>,<3>,<4>,<5>,<6>,<7>,<8>,<9>,<10>,<11>*hh<1> 當(dāng)前位置的格林尼治

9、時(shí)間,格式為hhmmss<2> 狀態(tài), A 為有效位置, V為非有效接收警告,即當(dāng)前天線視野上方的衛(wèi)星個(gè)數(shù)少于3顆。<3> 緯度, 格式為ddmm.mmmm<4> 標(biāo)明南北半球, N 為北半球、S為南半球<5> 徑度,格式為dddmm.mmmm <6> 標(biāo)明東西半球,E為東半球、W為西半球<8> 方位角,范圍為000.0到 359.9 度<9> 日期, 格式為ddmmyy <10> 地磁變化,從000.0到 180.0 度<11> 地磁變化方向,為E 或 W至于其他幾種幀格式,除了特殊用

10、途外,平時(shí)并不常用,雖然接收機(jī)也在源源不斷地向主機(jī)發(fā)送各種數(shù)據(jù)幀,但在處理時(shí)一般先通過對幀頭的判斷而只對"$GPRMC"幀進(jìn)行數(shù)據(jù)的提取處理。如果情況特殊,需要從其他幀獲取數(shù)據(jù),處理方法與之也是完全類似的。由于幀內(nèi)各數(shù)據(jù)段由逗號分割,因此在處理緩存數(shù)據(jù)時(shí)一般是通過搜尋ASCII碼"$"來判斷是否是幀頭,在對幀頭的類別進(jìn)行識別后再通過對所經(jīng)歷逗號個(gè)數(shù)的計(jì)數(shù)來判斷出當(dāng)前正在處理的是哪一種定位導(dǎo)航參數(shù),并作出相應(yīng)的處理。下面就是對緩存Data中的數(shù)據(jù)進(jìn)行解幀處理的主要代碼,本文在此只關(guān)心時(shí)間(日期和時(shí)間)和地理坐標(biāo)(經(jīng)、緯度):for(int i=0;iBR&

11、gt; if(Datai='$') file:/幀頭,SectionID為逗號計(jì)數(shù)器SectionID=0;if(Datai=10) file:/幀尾if(Datai=',') file:/逗號計(jì)數(shù)SectionID+;else switch(SectionID)case 1: file:/提取出時(shí)間m_sTime+=Datai;break;case 2: file:/判斷數(shù)據(jù)是否可信(當(dāng)GPS天線能接收到有3顆GPS衛(wèi)星時(shí)為A,可信)if(Datai='A')GPSParamm_nNumber.m_bValid=true;break;case 3: file:/提取出緯度m_sPositionY+=Datai;break;case 5: file:/提取出經(jīng)度m_sPositionX+=Datai;break;case 9: file:/提取出日期m_sDate+=Datai;break;default:break; 現(xiàn)在已將所需信息提取到內(nèi)存,即時(shí)間、日期以及經(jīng)緯度分別保存在CString型變量 m_sTime、m_Data、m_sPositionY和m_sPositionX中。在實(shí)際應(yīng)用中往往要根據(jù)需要對其做進(jìn)一步的運(yùn)算處理,比如從GPS接收機(jī)中獲得的時(shí)間信息為格林尼治時(shí)間,因此需要在

溫馨提示

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

評論

0/150

提交評論