2013-10-29 150 views
1

我正在嘗試從GPS設備(NMEA)讀取數據。我正在成功獲取數據。但是,一旦我開始使用它,它就會讓我不知所措。這是我從GPS獲得:如何從GPS(NMEA)設備讀取位置數據?

$GPGSA,A,3,20,25,31,22,14,29,03,16,32,06,27,,1.5,0.8,1.3*33 
$GPRMC,120556.000,A,2546.0985,S,02816.0193,E,0.22,276.44,291013,,,A*7A 
$GPGGA,120557.000,2546.0984,S,02816.0191,E,1,11,0.8,1396.3,M,21.5,M,,0000*71 
$GPGSA,A,3,20,25,31,22,14,29,03,16,32,06,27,,1.5,0.8,1.3*33 
$GPGSV,3,1,12,31,50,165,19,14,48,055,27,16,43,304,42,32,36,265,38*76 
$GPGSV,3,2,12,29,24,119,31,06,19,355,34,20,14,238,41,25,10,138,19*78 
$GPGSV,3,3,12,27,09,351,33,22,06,008,36,03,05,341,36,23,,221,*7F 
$GPRMC,120557.000,A,2546.0984,S,02816.0191,E,0.17,274.76,291013,,,A*7D 
$GPGGA,120558.000,2546.0982,S,02816.0189,E,1,11,0.8,1396.0,M,21.5,M,,0000*72 
$GPGSA,A,3,20,25,31,22,14,29,03,16,32,06,27,,1.5,0.8,1.3*33 
$GPRMC,120558.000,A,2546.0982,S,02816.0189,E,0.07,220.52,291013,,,A*7B 
$GPGGA,120559.000,2546.0981,S,02816.0187,E,1,11,0.8,1395.7,M,21.5,M,,0000*7A 
$GPGSA,A,3,20,25,31,22,14,29,03,16,32,06,27,,1.5,0.8,1.3*33 
$GPRMC,120559.000,A,2546.0981,S,02816.018 

以上是通過以下操作獲得:

//inside a 100ms ticker 
Dim data As String = GpsPort.ReadExisting() 
CommentBox.AppendText(data) 

只要我做Dim strArr() As String = data.Split("$")然後使用輸出:

CommentBox.AppendText(strArr(0).ToString) // inside the same ticker 

輸出爲:

034.000,2546.0985,S,02816.0298,E,1,11,0.8,1360.6,M,21.5,M,,0000*77 
3,20,29,14,22,31,25,03,16,32,06,27,,1.5,0.8,1.3*33 
MC,121034.000,A,2546.0985,S,02816.0298,E,0.01,236.13,291013,,,A*75 
.000,2546.0983,S,02816.0297,E,1,11,0.8,1359.9,M,21.5,M,,0000*7A 
A,A,3,20,29,14,22,31,25,03,16,32,06,27,,1.5,0.8,1.3*33 
,121035.000,A,2546.0983,S,02816.0297,E,0.06,283.04,291013,,,A*72 
036.000,2546.0982,S,02816.0296,E,1,11,0.8,1359.3,M,21.5,M,,0000*73 
3,20,29,14,22,31,25,03,16,32,06,27,,1.5,0.8,1.3*33 
MC,121036.000,A,2546.0982,S,02816.0296,E,0.03,190.30,291013,,,A*72 
.000,2546.0981,S,02816.0296,E,1,11,0.8,1358.6,M,21.5,M,,0000*75 
A,A,3,20,29,14,22,31,25,03,16,32,06,27,,1.5,0.8,1.3*33 
3,1,12,31,49,161,28,14,46,052,20,16,45,301,39,32,36,268,35*79 
3,2,12,29,23,122,18,06,21,355,27,20,15,240,40,27,11,351,37*78 

任何人都可以幫助我從GPGGA字符串獲取GPS座標嗎?因爲將它們分開顯然不起作用。

回答

1

您必須逐行讀取數據。 每行是一個NMEA句子。

一旦發現 「$ GPGGA」(或者你也可以使用RMC消息) 你有這樣一行:

$GPGGA,120557.000,2546.0984,S,02816.0191,E,1,11,0.8,1396.3,M,21.5,M,,0000*71 

現在你splitt通過分隔符 「」

那麼這就是北緯:2546.0984,S
這是經度02816.0191,E

在NMEA規範讀取的格式的座標:我認爲:首先位數latitdue有度,其餘爲分:25°46.098 4分鐘。如果「S」將結果乘以-1。

略有不同經度: 02816.0191,E

前3位數字度,其餘分鐘。 27°16.0191分鐘。如果「W」則與-1相乘。

0

基本上,您所看到的消息是一個相當複雜的消息格式的一部分。每個部分意味着不同的含義,並且含義取決於消息類型。

您可能需要查看this open source project中的部分代碼。我和一位同事一起寫了這個庫,它從一個特定的GPS設備中解析出這些消息,但它應該可以在幾乎所有的設備上輸出相同的數據。

相關問題