欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
VC++ 實(shí)現GPS全球定位系統定位數據的提取
VC++實(shí)現GPS全球定位系統定位數據的提取2002-12-10··信息產(chǎn)業(yè)部電子第二十二研究所青島分所郎銳··yesky



  摘要: 本文提出了一種在VC下實(shí)現對GPS全球定位系統定位信息的接收以及對各定位參數數據的提取方法。

  引言

衛星導航技術(shù)的飛速發(fā)展已逐漸取代了無(wú)線(xiàn)電導航、天文導航等傳統導航技術(shù),而成為一種普遍采用的導航定位技術(shù),并在精度、實(shí)時(shí)性、全天候等方面取得了長(cháng)足進(jìn)步?,F不僅應用于物理勘探、電離層測量和航天器導航等諸多民用領(lǐng)域,在軍事領(lǐng)域更是取得了廣泛的應用--在彈道導彈、野戰指揮系統、精確彈道測量以及軍用地圖快速測繪等領(lǐng)域均大量采用了衛星導航定位技術(shù)。有鑒于衛星導航技術(shù)在民用和軍事領(lǐng)域的重要意義,使其得到了許多國家的關(guān)注。我國也于2000年10月31日和12月21日成功發(fā)射了第一顆和第二顆導航定位試驗衛星并建立了我國第一代衛星導航定位系統--"北斗導航系統",但由于起步晚也沒(méi)有得到廣泛應用。目前在我國應用最多的還是美國的GPS系統。本文就針對當前比較普及的GPS系統,對其衛星定位信息的接收及其定位參數提取的實(shí)現方法予以介紹。

  定位信息的接收

  通常GPS定位信息接收系統主要由GPS接收天線(xiàn)、變頻器、信號通道、微處理器、存儲器以及電源等部分組成。由于GPS定位信息內容較少,因此多用RS-232串口將定位信息(NEMA0183語(yǔ)句)從GPS接收機傳送到計算機中進(jìn)行信息提取處理。從串口讀取數據有多種方法,在此直接使用 Win32API函數對其進(jìn)行編程處理。在Windows下不允許直接對硬件端口進(jìn)行控制操作,所有的端口均被視為"文件",因此在對串口進(jìn)行偵聽(tīng)之前需要通過(guò)打開(kāi)文件來(lái)打開(kāi)串口,并對其進(jìn)行相關(guān)參數配置:

m_hCom=CreateFile("COM1",GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING, FILE_FLAG_OVERLAPPED,NULL); file://以異步方式打開(kāi)COM1口
SetCommMask (m_hCom, EV_RXCHAR ) ; file://添加或修改Windows所報告的事件列表
SetupComm (m_hCom,READBUFLEN/*讀緩沖*/,WRITEBUFLEN/*寫(xiě)緩沖*/); // 初始化通訊設備參數
// 清除緩沖信息
PurgeComm (m_hCom, PURGE_TXABORT | PURGE_RXABORT | PURGE_TXCLEAR | PURGE_RXCLEAR) ;
// 對異步I/O進(jìn)行設置
CommTimeOuts.ReadIntervalTimeout = MAXDWORD ; file://接收兩連續字節的最大時(shí)間間隔
CommTimeOuts.ReadTotalTimeoutMultiplier =0; file://接收每字節的平均允許時(shí)間
CommTimeOuts.ReadTotalTimeoutConstant = 0 ; file://接收時(shí)間常數
SetCommTimeouts (m_hCom , &CommTimeOuts) ;
file://獲取并設置串口
GetCommState ( m_hCom, &dcb) ;
dcb.BaudRate = CBR_4800;
dcb.ByteSize = 8;
dcb.Parity = ODDPARITY;
dcb.StopBits = ONESTOPBIT ;
SetCommState( m_hCom, &dcb);

  在成功打開(kāi)并設置通訊口后,可采取輪詢(xún)串口和事件觸發(fā)兩種方式對數據進(jìn)行接收處理,本文在此采取效率比較高的事件觸發(fā)方式進(jìn)行接收處理,通過(guò)等待EV_RXCHAR事件的發(fā)生來(lái)啟動(dòng)ReadFile函數完成對GPS定位信息的接收:

while(true){
 WaitCommEvent (m_hCom,&dwEvtMask,NULL);
 if (dwEvtMask&EV_RXCHAR == EV_RXCHAR)
  if(ComStat.cbInQue>0)
   ReadFile(m_hCom,m_readbuf,ComStat.cbInQue,&nLength,&olRead);
}

  提取定位數據

GPS接收機只要處于工作狀態(tài)就會(huì )源源不斷地把接收并計算出的GPS導航定位信息通過(guò)串口傳送到計算機中。前面的代碼只負責從串口接收數據并將其放置于緩存,在沒(méi)有進(jìn)一步處理之前緩存中是一長(cháng)串字節流,這些信息在沒(méi)有經(jīng)過(guò)分類(lèi)提取之前是無(wú)法加以利用的。因此,必須通過(guò)程序將各個(gè)字段的信息從緩存字節流中提取出來(lái),將其轉化成有實(shí)際意義的,可供高層決策使用的定位信息數據。同其他通訊協(xié)議類(lèi)似,對GPS進(jìn)行信息提取必須首先明確其幀結構,然后才能根據其結構完成對各定位信息的提取。對于本文所使用的GARMINGPS天線(xiàn)板,其發(fā)送到計算機的數據主要由幀頭、幀尾和幀內數據組成,根據數據幀的不同,幀頭也不相同,主要有"$GPGGA"、"$GPGSA"、"$GPGSV"以及"$GPRMC"等。這些幀頭標識了后續幀內數據的組成結構,各幀均以回車(chē)符和換行符作為幀尾標識一幀的結束。對于通常的情況,我們所關(guān)心的定位數據如經(jīng)緯度、速度、時(shí)間等均可以從"$GPRMC"幀中獲取得到,該幀的結構及各字段釋義如下:

  $GPRMC,<1>,<2>,<3>,<4>,<5>,<6>,<7>,<8>,<9>,<10>,<11>*hh

  <1> 當前位置的格林尼治時(shí)間,格式為hhmmss

  <2> 狀態(tài), A 為有效位置, V為非有效接收警告,即當前天線(xiàn)視野上方的衛星個(gè)數少于3顆。

  <3> 緯度, 格式為ddmm.mmmm

  <4> 標明南北半球, N 為北半球、S為南半球

  <5> 徑度,格式為dddmm.mmmm

  <6> 標明東西半球,E為東半球、W為西半球

  <7> 地面上的速度,范圍為0.0到999.9

  <8> 方位角,范圍為000.0到 359.9 度

  <9> 日期, 格式為ddmmyy

  <10> 地磁變化,從000.0到 180.0 度

  <11> 地磁變化方向,為E 或 W

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

for(int i=0;i
 if(Data[i]==‘$‘) file://幀頭,SectionID為逗號計數器
  SectionID=0;
  if(Data[i]==10){ file://幀尾
}
 if(Data[i]==‘,‘) file://逗號計數
  SectionID++;
 else {
  switch(SectionID){
   case 1: file://提取出時(shí)間
    m_sTime+=Data[i];
    break;
   case 2: file://判斷數據是否可信(當GPS天線(xiàn)能接收到有3顆GPS衛星時(shí)為A,可信)
    if(Data[i]==‘A‘)
     GPSParam[m_nNumber].m_bValid=true;
     break;
   case 3: file://提取出緯度
     m_sPositionY+=Data[i];
     break;
   case 5: file://提取出經(jīng)度
     m_sPositionX+=Data[i];
     break;
   case 9: file://提取出日期
     m_sDate+=Data[i];
     break;
     default:
     break;
  }
 }
}

現在已將所需信息提取到內存,即時(shí)間、日期以及經(jīng)緯度分別保存在CString型變量m_sTime、m_Data、m_sPositionY和m_sPositionX中。在實(shí)際應用中往往要根據需要對其做進(jìn)一步的運算處理,比如從GPS接收機中獲得的時(shí)間信息為格林尼治時(shí)間,因此需要在獲取時(shí)間上加8小時(shí)才為我國標準時(shí)間。而且GPS使用的WGS-84坐標系也與我國采用的坐標系不同,有時(shí)也要對此加以變換。而這些變換運算必須通過(guò)數值運算完成,因此需要將前面獲取的字符型變量轉化為數值型變量,這部分工作可放在檢測到幀尾完成:

::strcpy(buf,m_sTime);
str.Format("%c%c",buf[0],buf[1]);
GPSParam[m_nNumber].m_nHour=(atoi(str)+8)%24; file://提取出小時(shí)并轉化為24小時(shí)制北京時(shí)間
file://buf第2、3字節為分鐘,4、5字節為秒,提取方法同上
……
::strcpy(buf,m_sDate);
str.Format("%c%c",buf[0],buf[1]); file://提取出月份
file://buf第2、3字節為天,4、5字節為年,提取方法同上
……
::strcpy(buf,m_sPositionY);
str.Format("%c%c",buf[0],buf[1]);
PositionValue=atoi(str);
str.Format("%c%c%c%c%c%c%c",buf[2],buf[3],buf[4],buf[5],buf[6],buf[7],buf[8]);
GPSParam[m_nNumber].m_dPositionY=PositionValue*60+atof(str); file://提取出緯度
……
::strcpy(buf,m_sPositionX);
if(m_sPositionX.GetLength()==10) file://經(jīng)度超過(guò)90度(如東經(jīng)125度)
{
 str.Format("%c%c%c",buf[0],buf[1],buf[2]);
 PositionValue=atoi(str);
 str.Format("%c%c%c%c%c%c%c",buf[3],buf[4],buf[5],buf[6],buf[7],buf[8],buf[9]);
 GPSParam[m_nNumber].m_dPositionX=PositionValue*60+atof(str); file://提取出經(jīng)度(單位為分)
}
if(m_sPositionX.GetLength()==9) file://經(jīng)度未超過(guò)90度(如東經(jīng)89度)
{
 file://處理方法同上,只是buf的第0、1字節為度數,2~9為分數。
}

  到此為止,已將時(shí)間和經(jīng)緯度信息提取到GPS結構數組GPSParam中的各個(gè)變量中去,后續的處理和高層決策可根據該結構中存儲的數據作出相應的處理。

  小結

本文結合主要的相關(guān)程序代碼對GPS全球定位系統的定位導航信息的接收和參數數據的提取進(jìn)行了討論,同時(shí)也對串口的程序設計作了簡(jiǎn)要的講述。通過(guò)本文的設計方法可以將GPS定位導航信息從GPS接收機完整接收,通過(guò)對定位參數的提取可將其應用于其他高層應用決策如各種GIS、RS系統等。本文程序在Windows 98下,由Microsoft Visual C++ 6.0編譯通過(guò)。



本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
獲取GPS模塊數據并規格化輸出
使用Python破解通達信股票數據
VC++串口WriteFile()的問(wèn)題
MicroPython-GPS教程之TPYBoardv702控制5110顯示當前經(jīng)緯度
用VC++6.0實(shí)現PC機與單片機之間的串口數據交換
android SD卡的讀寫(xiě)
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久