gpgga格式讀取MATLAB,GPS編碼格式及讀取.doc

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

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

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

<2> 狀態, A 為有效位置, V為非有效接收警告,即當前天線視野上方的衛星個數少于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

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

for(int i=0;i  if(Data=='$') file://幀頭,SectionID為逗號計數器

SectionID=0;

if(Data==10){ file://幀尾

}

if(Data==',') file://逗號計數

SectionID++;

else {

switch(SectionID){

case 1: file://提取出時間

m_sTime+=Data;

break;

case 2: file://判斷數據是否可信(當GPS天線能接收到有3顆GPS衛星時為A,可信)

if(Data=='A')

GPSParam[m_nNumber].m_bValid=true;

break;

case 3: file://提取出緯度

m_sPositionY+=Data;

break;

case 5: file://提取出經度

m_sPositionX+=Data;

break;

case 9: file://提取出日期

m_sDate+=Data;

break;

default:

break;

}

}

}

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

::strcpy(buf,m_sTime);

str.Format("%c%c",buf[0],buf[1]);

GPSPar

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/453423.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/453423.shtml
英文地址,請注明出處:http://en.pswp.cn/news/453423.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Cadence 電源完整性仿真實踐(二)

轉載于:http://blog.csdn.net/wu20093346/article/details/38050917 通過以上步驟對每個平面進行了單節點分析并觀測了響應曲線&#xff0c;接下來將觀測平面對的目標阻抗是否滿足要求&#xff0c;通過選擇電容器的方法來減小含有電容器阻抗響應曲線中的反諧振波峰。在SigWave窗…

Johnson 全源最短路徑算法

解決單源最短路徑問題&#xff08;Single Source Shortest Paths Problem&#xff09;的算法包括&#xff1a; Dijkstra 單源最短路徑算法&#xff1a;時間復雜度為 O(E VlogV)&#xff0c;要求權值非負&#xff1b; Bellman-Ford 單源最短路徑算法&#xff1a;時間復雜度為 O…

單循環鏈表中設置尾指針比設置頭指針更好的原因

尾指針是指向終端結點的指針&#xff0c;用它來表示單循環鏈表可以使得查找鏈表的開始結點和終端結點都很方便。 設一帶頭結點的單循環鏈表&#xff0c;其尾指針為rear&#xff0c;則開始結點和終端結點的位置分別是rear->next->next和rear,查找時間都是O(1)。 若用頭指…

為何大部分人成不了技術專家?

此文為我在CSDN的新的SNS里看到的&#xff0c;感觸很深&#xff0c;和大家分享一下.里面的許多人的觀點都讓我受益匪淺。 如果你是項目經理&#xff0c;產品經理或者架構師&#xff0c;我真誠邀請你加入 如果你還是學生或者還是初學者&#xff0c;我建議你先等等&#xff0c;…

Machine Learning 學習筆記1 - 基本概念以及各分類

What is machine learning? 并沒有廣泛認可的定義來準確定義機器學習。以下定義均為譯文&#xff0c;若以后有時間&#xff0c;將補充原英文...... 定義1、來自Arthur Samuel&#xff08;上世紀50年代、西洋棋程序&#xff09; 在進行特定編程的情況下給予計算機學習能力的領域…

值傳遞與地址傳遞

值傳遞與地址傳遞的區別&#xff1a;兩者其實傳遞的都是一個內存單元的內容。不同的是&#xff0c;值傳遞傳遞的內容是一個變量的值&#xff0c;得到這個值后&#xff0c;對這個值的修改不能改變原變量的值&#xff1b;而地址傳遞傳遞的是一個變量的地址&#xff0c;得到傳遞的…

蒙特 卡羅方法matlab,蒙特·卡羅方法中的數學之美,你一定不想錯過

原標題&#xff1a;蒙特卡羅方法中的數學之美&#xff0c;你一定不想錯過有方教育——我們致力于為中學生提供學界和業界前沿的學術科研教育內容&#xff0c;幫助學生參加海外科研項目&#xff0c;在提升申請競爭力的同時&#xff0c;獲得領跑優勢。一、概述蒙特卡羅方法(Monte…

【 CDN 最佳實踐】CDN 命中率優化思路

CDN 在靜態資源的加速場景中是將靜態資源緩存在距離客戶端較近的CDN 節點上&#xff0c;然后客戶端訪問該資源即可通過較短的鏈路直接從緩存中獲取資源&#xff0c;而避免再通過較長的鏈路回源獲取靜態資源。因此 CDN的緩存命中率的高低直接影響客戶體驗&#xff0c;而保證較高…

職場新人的入門法則:少想、多做、立即執行!

對于剛進入職場的新人來說&#xff0c;要想在工作中快速獲得成長&#xff0c;唯一辦法就是&#xff1a;“少想&#xff0c;多做&#xff0c;立即執行&#xff01;”。 少想不等于盲目&#xff0c;在保證工作思路絕對清晰的同時&#xff0c;執行力越高&#xff0c;執行速度越快…

Python基礎-time and datetime

一、在Python中&#xff0c;通常有這幾種方式來表示時間&#xff1a; 時間戳格式化的時間字符串元組&#xff08;struct_time&#xff09;共九個元素。由于Python的time模塊實現主要調用C庫&#xff0c;所以各個平臺可能有所不同。1.時間戳&#xff08;timestamp&#xff09;的…

實際應用中帶頭節點的線性鏈表

/*帶頭節點的線性鏈表類型*/ typedef char ElemType//結點類型 typedef struct LNode {char data;struct LNode *next; }*Link,*Position;//鏈表類型 typedef struct {Link head,tail;int len; }LinkList;/**/ /*一些在其他函數定義中會調用的函數*/ /**//*---compare---比較兩…

matlab中歐姆如何表示,在excel中歐姆符號怎么打

在excel中歐姆符號怎么打&#xff0c;相信對于好多熟練用excel的朋友來說&#xff0c;是很簡單不過的&#xff0c;但是對于有些初學者來說&#xff0c;就是菜鳥啦&#xff0c;就有點懵懵懂懂的感覺了&#xff0c;畢竟剛接觸的東西還沒用過嘛。但是&#xff0c;沒關系今天筆者就…

原生js系列之DOM工廠模式

寫在前面 如今&#xff0c;在項目中使用React、Vue等框架作為技術棧已成為一種常態&#xff0c;在享受帶來便利性的同時&#xff0c;也許我們漸漸地遺忘原生js的寫法。 現在&#xff0c;是時候回歸本源&#xff0c;響應原始的召喚了。本文將一步一步帶領大家封裝一套屬于自己的…

武術與軟件設計 - 簡單即是最好

偶然間在公車上看見一個講中國功夫的特輯&#xff0c;說道香港武打片的發展歷程&#xff0c;當然就不得不提起李小龍先生&#xff0c;我們知道他截拳道的威力&#xff0c;這時候我記得在看李小龍傳奇時他所說的一些話&#xff0c;當他和美國一個高手比武后他輸了&#xff0c;最…

matlab的概述,Matlab概述

MATLAB(矩陣實驗室)是數字計算&#xff0c;可視化和編程的第四代高級編程語言和交互式環境。MATLAB是由MathWorks開發的。它允許矩陣操縱&#xff0c;繪制功能和數據; 實現算法; 創建用戶界面; 與其他語言編寫的程序(包括C語言&#xff0c;C&#xff0c;Java和FORTRAN)進行交互…

形參和實參

形參&#xff1a;全稱為“形式參數”是在定義函數名和函數體的時候使用的參數&#xff0c;目的是用來接收調用該函數時傳遞的參數。形參的作用是實現主調函數與被調函數之間的聯系&#xff0c;通常將函數所處理的數據&#xff0c;影響函數功能的因素或者函數處理的結果作為形參…

sizeof和strlen的區別

strlen——get the length of a string.size_t strlen(const char *string);Each ofthese functions returns the number of characters instring, notincluding the terminating null character.//函數返回string里的字符數&#xff0c;不包括終止字符\0sizeofThe sizeof keyw…

位置參數及操作符號

特殊字符對應的處理參數&#xff1a; 參數說明$0當前執行的腳本文件名&#xff0c;若全路徑執行&#xff0c;則顯示腳本路徑$n當前執行腳本的第n個參數值&#xff0c;若n>9&#xff0c;則需寫成${10}$#當前傳參總個數$$腳本運行的當前進程ID號,用例&#xff1a;當一個進程重…

python變量命名可以有特殊符號嗎,和孩子一起學習python之變量命名規則

下面是關于變量名(也稱為標識符)的一些規則必須以一個字母或一個下劃線字符開頭。后面可以使用一個字母、數字或下劃線字符的序列&#xff0c;長度不限。字母可以是大寫或小寫&#xff0c;大小寫是不同的。也就是說&#xff0c;Ax不同于aX。數字可以是從0到9(包括0到9)的任意數…

C語言中*和

(一) 在定義時&#xff0c;* 是一個標識符&#xff0c;聲明該變量是一個指針&#xff0c;比如說int *p; 那p就是一個指向int型的指針&#xff1b; 在調用時&#xff0c; &#xff08;1&#xff09;*p是指指針p指向的那個變量&#xff0c;比如說之前有int a5&#xff1b;int …