1

GPS デバイス (NMEA) からデータを読み取ろうとしています。無事にデータを取得しています。しかし、使い始めるとすぐにズルズルしてきます。これは私がGPSから得たものです:

$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

文字列から GPS 座標を取得するのを手伝ってくれる人はいGPGGAますか? それらを明確に分割してもうまくいかないからです。

4

2 に答える 2

1

データを 1 行ずつ読み取る必要があります。各行は 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

これで、区切り文字「、」で分割されます

次に、これは緯度です: 2546.0984,S
そして、これは経度 02816.0191,E です

座標の形式が NMEA 仕様で読み取られます: 私が思うに: 緯度の最初の数字は度で、残りは分です: 25° 46.0984 分。"S" の場合、結果に -1 を掛けます。

経度がわずかに異なります: 02816.0191,E

最初の 3 桁の度、残りの分。27° 16.0191 分。"W" の場合は -1 を掛けます。

于 2013-10-29T15:24:41.957 に答える
0

基本的に、表示されているメッセージはかなり複雑なメッセージ形式の一部です。各部分の意味は異なり、その意味はメッセージの種類によって異なります。

このオープン ソース プロジェクトのコードの一部を参照することをお勧めします。私は同僚と一緒にこのライブラリを作成し、特定の GPS デバイスからのメッセージを解析しましたが、同じデータを出力するほとんどすべてのデバイスで動作するはずです。

于 2013-10-29T14:49:24.727 に答える