2.3.2 電子海圖系統(tǒng)解析及開發(fā) 功能開發(fā) - 接入GPS數(shù)據(jù)

電子海圖(ENC)中規(guī)定的坐標(biāo)系為WGS-84,該坐標(biāo)系就是GPS所采用的坐標(biāo)系,因此電子海圖系統(tǒng)必須要接入GPS數(shù)據(jù)。其實(shí),衛(wèi)星定位系統(tǒng)中,除了GPS,還有中國的北斗、俄羅斯的GLONASS和歐盟的Galileo,這些定位接收器的數(shù)據(jù)都可以通過NMEA0813傳輸。

設(shè)備類型 描述 設(shè)備類型 描述 設(shè)備類型 描述
BD 北斗 GP GPS GN 多衛(wèi)星組合導(dǎo)航
GL GLONASS GA Galileo EC ECDIS

GPS報(bào)文格式有很多種,具體可參見https://gpsd.gitlab.io/gpsd/NMEA.html,但常見的有:

  1. RMC 推薦最小定位信息
        1         2 3         4 5          6  7   8   9    10 1112 13
        |         | |         | |          |  |   |   |    |  | |  |
 $--RMC,hhmmss.ss,A,llll.llll,a,yyyyy.yyyy,a,x.x,x.x,xxxx,x.x,a,m,*hh<CR><LF>

 $GPRMC,075629.80,V,3759.2680,N,02334.6295,E,0.46,171.32,211206,2.6,W,N*34

字段1:定位時(shí)的世界時(shí)UTC;如:075629.80=07:56:29.80Z
字段2:狀態(tài):A=有效;V=警告
字段3:緯度:如:3759.2680=37°59.2680'
字段4:緯度的方向 N 或 S
字段5:經(jīng)度;如:02334.6295=23°34.6295'
字段6:經(jīng)度的方向 E 或 W
字段7:對地航速;如:0.46kn
字段8:對地航向;如:171.32°
字段9:日期,形式ddMMyy,起點(diǎn)為2000年;如:211206=2006-12-21
字段10:磁差;如:2.6°
字段11:磁差的方向 E 或 W
字段12:FAA模式指示符(A=自主定位,D=差分,E=估算,N=數(shù)據(jù)無效)
字段13:校驗(yàn)和;如:34

  1. GGA 定位數(shù)據(jù)
        1         2       3 4        5 6 7  8   9  10 11 12 13  14   15
        |         |       | |        | | |  |   |   | |   | |   |    |
 $--GGA,hhmmss.ss,llll.ll,a,yyyyy.yy,a,x,xx,x.x,x.x,M,x.x,M,x.x,xxxx*hh<CR><LF>

 $GNGGA,001043.00,4404.14036,N,12118.85961,W,1,12,0.98,1113.0,M,-21.3,M,,*47

字段1:定位時(shí)的世界時(shí)UTC;如:001043.00=00:10:43.00Z
字段2:緯度:如:4404.14036=44°04.14036'
字段3:緯度的方向 N 或 S
字段4:經(jīng)度;如:12118.85961=121°18.85961'
字段5:經(jīng)度的方向 E 或 W
字段6:GPS定位質(zhì)量指示符;如:1=GPS定位
字段7:衛(wèi)星的使用量;如:12
字段8:水平精度因子;如:0.98米
字段9:天線高度(相對于平均海面);如:1113.0
字段10:天線高度單位;如:米
字段11:坐標(biāo)系與平均海面的差值;如:-21.3
字段12:差值的單位;如:米
字段13:差分GPS數(shù)據(jù)期限
字段14:差分參考基站ID,取值0000-1023
字段15:校驗(yàn)和;如:47

  1. GSA GPS精度因子與當(dāng)前衛(wèi)星
        1 2 3 4 5 6 7 8 91011121314 15  16  17  18
        | | | | | | | | | | | | | |  |   |   |  |   
 $--GSA,a,a,x,x,x,x,x,x,x,x,x,x,x,x,x.x,x.x,x.x*hh<CR><LF>

 $GNGSA,A,3,80,71,73,79,69,,,,,,,,1.83,1.09,1.47*17

字段1:定位模式 M=手動;A=自動
字段2:定位類型 1=無定位;2=2D定位;3=3D定位
字段3:第1信道使用中的PRN碼編號
字段4:第2信道使用中的PRN碼編號
字段5:第3信道使用中的PRN碼編號
字段6:第4信道使用中的PRN碼編號
字段7:第5信道使用中的PRN碼編號
字段8:第6信道使用中的PRN碼編號
字段9:第7信道使用中的PRN碼編號
字段10:第8信道使用中的PRN碼編號
字段11:第9信道使用中的PRN碼編號
字段12:第10信道使用中的PRN碼編號
字段13:第11信道使用中的PRN碼編號
字段14:第12信道使用中的PRN碼編號
字段15:PDOP位置精度因子
字段16:HDOP水平精度因子
字段17:VDOP垂直精度因子
字段18:校驗(yàn)和

  1. GLL 地理位置:經(jīng)/緯度
         1      2 3        4 5         6 7   8
         |      | |        | |         | |   |
 $--GLL,llll.ll,a,yyyyy.yy,a,hhmmss.ss,a,m,*hh<CR><LF>

 $GNGLL,4404.14012,N,12118.85993,W,001037.00,A,A*67

字段1:緯度
字段2:緯度的方向 N 或 S
字段3:經(jīng)度
字段4:經(jīng)度的方向 E 或 W
字段5:定位時(shí)的世界時(shí)UTC
字段6:狀態(tài):A=有效;V=無效
字段7:FAA模式指示符
字段8:校驗(yàn)和

  1. GST 偽距噪聲統(tǒng)計(jì)
              1    2 3 4 5 6 7 8   9
              |    | | | | | | |   |
 $ --GST,hhmmss.ss,x,x,x,x,x,x,x,*hh<CR><LF>

 $GPGST,182141.000,15.5,15.3,7.2,21.8,0.9,0.5,0.8*54

字段1:時(shí)間
字段2:RMS的標(biāo)準(zhǔn)差
字段3:誤差橢圓長半軸的標(biāo)準(zhǔn)差(米)
字段4:誤差橢圓短半軸的標(biāo)準(zhǔn)差(米)
字段5:誤差橢圓長半軸的方向(度)
字段6:緯度誤差的標(biāo)準(zhǔn)差(米)
字段7:經(jīng)度誤差的標(biāo)準(zhǔn)差(米)
字段8:高度誤差的標(biāo)準(zhǔn)差(米)
字段9:校驗(yàn)和

  1. GSV 可見衛(wèi)星的信息
        1 2 3 4 5 6 7     n
        | | | | | | |     |
 $--GSV,x,x,x,x,x,x,x,...*hh<CR><LF>

 $GPGSV,3,1,11,03,03,111,00,04,15,270,00,06,01,010,00,13,06,292,00*74
 $GPGSV,3,2,11,14,25,170,00,16,57,208,39,18,67,296,40,19,40,246,00*74
 $GPGSV,3,3,11,22,42,067,42,24,14,311,43,27,05,244,00,,,,*4D

字段1:GSV報(bào)文總數(shù)
字段2:當(dāng)前組內(nèi)報(bào)文編號
字段3:可見衛(wèi)星的總數(shù)
字段4:衛(wèi)星編號
字段5:仰角
字段6:方位角
字段7:信噪比 (有多少衛(wèi)星,字段4-7會重復(fù)多少次)

  1. VTG 對地航向和航速
         1  2  3  4  5  6  7  8 9  10
         |  |  |  |  |  |  |  | |  |
 $--VTG,x.x,T,x.x,M,x.x,N,x.x,K,m,*hh<CR><LF>

 $GPVTG,220.86,T,,M,2.550,N,4.724,K,A*34

字段1:對地航向
字段2:T=真航向
字段3:對地航向
字段4:M=磁航向
字段5:對地航速
字段6:N=kn
字段7:對地航速
字段8:K=千米/時(shí)
字段9:FAA模式指示符
字段10:校驗(yàn)和

  1. ZDA 日期時(shí)間
        1         2  3  4    5  6  7
        |         |  |  |    |  |  |
 $--ZDA,hhmmss.ss,xx,xx,xxxx,xx,xx*hh<CR><LF>

 $GPZDA,160012.71,11,03,2004,-1,00*7D

字段1:UTC時(shí)間
字段2:天;范圍:01~31
字段3:月;范圍:01~12
字段4:年
字段5:當(dāng)?shù)貢r(shí)時(shí)差;范圍:-13~+13
字段6:本地時(shí)分鐘差;范圍:00~59
字段7:校驗(yàn)和

新建靜態(tài)類GPSParser,對GPS報(bào)文進(jìn)行','拆分,根據(jù)不同的報(bào)文進(jìn)行解碼,解碼結(jié)果以鍵值對的形式封裝進(jìn)哈希表中:

    public static class GPSParser
    {
        public static Hashtable ParseSentence(string sentence)
        {
            var ss = sentence.Split(',');
            switch (ss[0])
            {
                case "$GPRMC":
                    return GpsMessage_RMC(ss);
                ... 其他報(bào)文
                default:
                    throw new Exception($"暫不支持解析GPS報(bào)文[{ss[0]}]");
            }
        }
        
        private static Hashtable GpsMessage_RMC(string[] ss)
        {
            //時(shí)間格式解析
            var utc = new DateTime(
                2000+int.Parse(ss[9].Substring(4,2)),
                int.Parse(ss[9].Substring(2,2)),
                int.Parse(ss[9].Substring(0,2)),
                int.Parse(ss[1].Substring(0,2)),
                int.Parse(ss[1].Substring(2,2)),
                int.Parse(ss[1].Substring(4,2)),
                DateTimeKind.Utc);
            
            //緯度
            var lat = int.Parse(ss[3].Substring(0, 2)) + double.Parse(ss[3].Substring(2)) / 60;
            if (ss[4] == "S") lat *= -1;
            
            //經(jīng)度
            var lon = int.Parse(ss[5].Substring(0, 3)) + double.Parse(ss[5].Substring(3)) / 60;
            if (ss[6] == "W") lon *= -1;
            
            var res = new Hashtable
            {
                {"UTCTime", utc},
                {"Status", ss[2]},
                {"Latitude", lat},
                {"Longitude", lon},
                {"SpeedOverGround", double.Parse(ss[7])},
                {"TrackMadeGood", double.Parse(ss[8])},
                {"MagneticVariation", ss[10]+ss[11]},
                {"FAAModeIndicator", ss[12]},
            };
            return res;
        }
    }
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容