gpgga格式读取MATLAB,GPS编码格式及读取.doc
GPS接收機(jī)只要處于工作狀態(tài)就會(huì)源源不斷地把接收并計(jì)算出的GPS導(dǎo)航定位信息通過(guò)串口傳送到計(jì)算機(jī)中。前面的代碼只負(fù)責(zé)從串口接收數(shù)據(jù)并將其放置于緩存,在沒(méi)有進(jìn)一步處理之前緩存中是一長(zhǎng)串字節(jié)流,這些信息在沒(méi)有經(jīng)過(guò)分類(lèi)提取之前是無(wú)法加以利用的。因此,必須通過(guò)程序?qū)⒏鱾€(gè)字段的信息從緩存字節(jié)流中提取出來(lái),將其轉(zhuǎn)化成有實(shí)際意義的,可供高層決策使用的定位信息數(shù)據(jù)。同其他通訊協(xié)議類(lèi)似,對(duì)GPS進(jìn)行信息提取必須首先明確其幀結(jié)構(gòu),然后才能根據(jù)其結(jié)構(gòu)完成對(duì)各定位信息的提取。對(duì)于本文所使用的GARMIN GPS天線(xiàn)板,其發(fā)送到計(jì)算機(jī)的數(shù)據(jù)主要由幀頭、幀尾和幀內(nèi)數(shù)據(jù)組成,根據(jù)數(shù)據(jù)幀的不同,幀頭也不相同,主要有"$GPGGA"、"$GPGSA"、"$GPGSV"以及"$GPRMC"等。這些幀頭標(biāo)識(shí)了后續(xù)幀內(nèi)數(shù)據(jù)的組成結(jié)構(gòu),各幀均以回車(chē)符和換行符作為幀尾標(biāo)識(shí)一幀的結(jié)束。對(duì)于通常的情況,我們所關(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)前位置的格林尼治時(shí)間,格式為hhmmss
<2> 狀態(tài), A 為有效位置, V為非有效接收警告,即當(dāng)前天線(xiàn)視野上方的衛(wèi)星個(gè)數(shù)少于3顆。
<3> 緯度, 格式為ddmm.mmmm
<4> 標(biāo)明南北半球, N 為北半球、S為南半球
<5> 徑度,格式為dddmm.mmmm
<6> 標(biāo)明東西半球,E為東半球、W為西半球
<7> 地面上的速度,范圍為0.0到999.9
<8> 方位角,范圍為000.0到 359.9 度
<9> 日期, 格式為ddmmyy
<10> 地磁變化,從000.0到 180.0 度
<11> 地磁變化方向,為E 或 W
至于其他幾種幀格式,除了特殊用途外,平時(shí)并不常用,雖然接收機(jī)也在源源不斷地向主機(jī)發(fā)送各種數(shù)據(jù)幀,但在處理時(shí)一般先通過(guò)對(duì)幀頭的判斷而只對(duì)"$GPRMC"幀進(jìn)行數(shù)據(jù)的提取處理。如果情況特殊,需要從其他幀獲取數(shù)據(jù),處理方法與之也是完全類(lèi)似的。由于幀內(nèi)各數(shù)據(jù)段由逗號(hào)分割,因此在處理緩存數(shù)據(jù)時(shí)一般是通過(guò)搜尋ASCII碼"$"來(lái)判斷是否是幀頭,在對(duì)幀頭的類(lèi)別進(jìn)行識(shí)別后再通過(guò)對(duì)所經(jīng)歷逗號(hào)個(gè)數(shù)的計(jì)數(shù)來(lái)判斷出當(dāng)前正在處理的是哪一種定位導(dǎo)航參數(shù),并作出相應(yīng)的處理。下面就是對(duì)緩存Data中的數(shù)據(jù)進(jìn)行解幀處理的主要代碼,本文在此只關(guān)心時(shí)間(日期和時(shí)間)和地理坐標(biāo)(經(jīng)、緯度):
for(int i=0;i if(Data=='$') file://幀頭,SectionID為逗號(hào)計(jì)數(shù)器
SectionID=0;
if(Data==10){ file://幀尾
}
if(Data==',') file://逗號(hào)計(jì)數(shù)
SectionID++;
else {
switch(SectionID){
case 1: file://提取出時(shí)間
m_sTime+=Data;
break;
case 2: file://判斷數(shù)據(jù)是否可信(當(dāng)GPS天線(xiàn)能接收到有3顆GPS衛(wèi)星時(shí)為A,可信)
if(Data=='A')
GPSParam[m_nNumber].m_bValid=true;
break;
case 3: file://提取出緯度
m_sPositionY+=Data;
break;
case 5: file://提取出經(jīng)度
m_sPositionX+=Data;
break;
case 9: file://提取出日期
m_sDate+=Data;
break;
default:
break;
}
}
}
現(xiàn)在已將所需信息提取到內(nèi)存,即時(shí)間、日期以及經(jīng)緯度分別保存在CString型變量 m_sTime、m_Data、m_sPositionY和m_sPositionX中。在實(shí)際應(yīng)用中往往要根據(jù)需要對(duì)其做進(jìn)一步的運(yùn)算處理,比如從GPS接收機(jī)中獲得的時(shí)間信息為格林尼治時(shí)間,因此需要在獲取時(shí)間上加8小時(shí)才為我國(guó)標(biāo)準(zhǔn)時(shí)間。而且GPS使用的WGS-84坐標(biāo)系也與我國(guó)采用的坐標(biāo)系不同,有時(shí)也要對(duì)此加以變換。而這些變換運(yùn)算必須通過(guò)數(shù)值運(yùn)算完成,因此需要將前面獲取的字符型變量轉(zhuǎn)化為數(shù)值型變量,這部分工作可放在檢測(cè)到幀尾完成:
::strcpy(buf,m_sTime);
str.Format("%c%c",buf[0],buf[1]);
GPSPar
總結(jié)
以上是生活随笔為你收集整理的gpgga格式读取MATLAB,GPS编码格式及读取.doc的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 常见的芯片封装大全
- 下一篇: latex中怎样使公式居中_LaTeX_