1. 程式人生 > >GPS資料包解析--android端

GPS資料包解析--android端

首先講一下應用場景:

手機+OTG線+USB轉OTG+帶USB線的GPS定位外設

獲取資料很簡單,通過手機APP自動從OTG口自動讀取GPS的定位資訊,獲取到的經緯度不能對應到百度谷歌地圖上,一開始認為是不是自己程式碼寫的有問題,拿到的資料流被丟包亂碼什麼的過濾了,其實不然。拿到的資料是GPS外設自動返回的沒問題。問題就在與GPS定位資訊在各大地圖上使用時加密處理了 ,要按指定的演算法才能使用,具體為什麼被加密,可以去百度,也能想來,安全唄。好了直接上內容,如下:

GPS上電後,每隔一定的時間就會返回一定格式的資料,資料格式為:

$資訊型別,x,x,x,x,x,x,x,x,x,x,x,x,x

每行開頭的字元都是$’,接著是資訊型別,後面是資料,以逗號分隔開。一行完整的資料如下:

$GPRMC,080655.00,A,4546.40891,N,12639.65641,E,1.045,328.42,170809,,,A*60

資訊型別為:

GPGSV:可見衛星資訊

GPGLL:地理定位資訊

GPRMC:推薦最小定位資訊

GPVTG:地面速度資訊

GPGGA:GPS定位資訊

GPGSA:當前衛星資訊

這裡我們只解析GPRMC和GPGGA的資訊

GPRMC資料詳解:

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

<1> UTC時間,hhmmss(時分秒)格式

<2> 定位狀態,A=有效定位,V=無效定位

<3> 緯度ddmm.mmmm(度分)格式(前面的0也將被傳輸)

<4> 緯度半球N(北半球)或S(南半球)

<5> 經度dddmm.mmmm(度分)格式(前面的0也將被傳輸)

<6> 經度半球E(東經)或W(西經)

<7> 地面速率(000.0~999.9節,前面的0也將被傳輸)

<8> 地面航向(000.0~359.9度,以真北為參考基準,前面的0也將被傳輸)

<9> UTC日期,ddmmyy(日月年)格式

<10> 磁偏角(000.0~180.0度,前面的0也將被傳輸)

<11> 磁偏角方向,E(東)或W(西)

<12> 模式指示(僅NMEA0183 3.00版本輸出,A=自主定位,D=差分,E=估算,N=資料無效)

解析內容:

1. 時間,這個是格林威治時間,是世界時間(UTC),我們需要把它轉換成北京時間(BTC),BTC和UTC差了8個小時,要在這個時間基礎上加8個小時。

2. 定位狀態,在接收到有效資料前,這個位是‘V’,後面的資料都為空,接到有效資料後,這個位是‘A’,後面才開始有資料。

3. 緯度,我們需要把它轉換成度分秒的格式,計算方法:

如接收到的緯度是:4546.40891

4546.40891 / 100  =  45.4640891   可以直接讀出45度

4546.40891–45 * 100 = 46.40891   可以直接讀出46分

46.40891–46 = 0.40891 * 60 = 24.5346  讀出24秒

所以緯度是:45度46分24秒。

1. 南北緯,這個位有兩種值‘N’(北緯)和‘S’(南緯)

2. 經度的計算方法和緯度的計算方法一樣

3. 東西經,這個位有兩種值‘E’(東經)和‘W’(西經)

4. 速率,這個速率值是 海里/時,單位是節,要把它轉換成千米/時,根據:1海里 = 1.85公里,把得到的速率乘以1.85。

5. 航向,指的是偏離正北的角度

6. 日期,這個日期是準確的,不需要轉換

GPGGA資料詳解:

$GPGGA,<1>,<2>,<3>,<4>,<5>,<6>,<7>,<8>,<9>,M,<10>,M,<11>,<12>*xx<CR><LF>

$GPGGA:起始引導符及語句格式說明(本句為GPS定位資料);

<1>  UTC時間,格式為hhmmss.sss;

<2>  緯度,格式為ddmm.mmmm(第一位是零也將傳送);

<3>  緯度半球,N或S(北緯或南緯)

<4>  經度,格式為dddmm.mmmm(第一位零也將傳送);

<5>  經度半球,E或W(東經或西經)

<6>  定位質量指示,0=定位無效,1=定位有效;

<7>  使用衛星數量,從00到12(第一個零也將傳送)

<8>  水平精確度,0.5到99.9

<9>  天線離海平面的高度,-9999.9到9999.9米  M  指單位米

<10> 大地水準面高度,-9999.9到9999.9米  M    指單位米

<11> 差分GPS資料期限(RTCM SC-104),最後設立RTCM傳送的秒數量

<12>  差分參考基站標號,從0000到1023(首位0也將傳送)。

解析內容:

9,10個欄位,海平面高度和大地水準面高度,單位是米

備註:GPS->2604.22321 = 26度04分13.3926秒 (0.22321*60秒) = 26.070386833度 (26+04/60 + 13.3926/3600)

http://www.csgsm.com/?view-110.html