java_GPS數據處理

来源:https://www.cnblogs.com/songzi-yang/archive/2018/12/06/10074701.html
-Advertisement-
Play Games

題目內容: NMEA-0183協議是為了在不同的GPS(全球定位系統)導航設備中建立統一的BTCM(海事無線電技術委員會)標準,由美國國家海洋電子協會(NMEA-The National Marine Electronics Associa-tion)制定的一套通訊協議。GPS接收機根據NMEA-0 ...


題目內容:

NMEA-0183協議是為了在不同的GPS(全球定位系統)導航設備中建立統一的BTCM(海事無線電技術委員會)標準,由美國國家海洋電子協會(NMEA-The National Marine Electronics Associa-tion)制定的一套通訊協議。GPS接收機根據NMEA-0183協議的標準規範,將位置、速度等信息通過串口傳送到PC機、PDA等設備。

 

NMEA-0183協議是GPS接收機應當遵守的標準協議,也是目前GPS接收機上使用最廣泛的協議,大多數常見的GPS接收機、GPS數據處理軟體、導航軟體都遵守或者至少相容這個協議。

 

NMEA-0183協議定義的語句非常多,但是常用的或者說相容性最廣的語句只有$GPGGA、$GPGSA、$GPGSV、$GPRMC、$GPVTG、$GPGLL等。

 

其中$GPRMC語句的格式如下:

 

$GPRMC,024813.640,A,3158.4608,N,11848.3737,E,10.05,324.27,150706,,,A*50

 

這裡整條語句是一個文本行,行中以逗號“,”隔開各個欄位,每個欄位的大小(長度)不一,這裡的示例只是一種可能,並不能認為欄位的大小就如上述例句一樣。

 

欄位0:$GPRMC,語句ID,表明該語句為Recommended Minimum Specific GPS/TRANSIT Data(RMC)推薦最小定位信息

欄位1:UTC時間,hhmmss.sss格式

欄位2:狀態,A=定位,V=未定位

欄位3:緯度ddmm.mmmm,度分格式(前導位數不足則補0)

欄位4:緯度N(北緯)或S(南緯)

欄位5:經度dddmm.mmmm,度分格式(前導位數不足則補0)

欄位6:經度E(東經)或W(西經)

欄位7:速度,節,Knots

欄位8:方位角,度

欄位9:UTC日期,DDMMYY格式

欄位10:磁偏角,(000 - 180)度(前導位數不足則補0)

欄位11:磁偏角方向,E=東W=西

欄位16:校驗值

 

這裡,“*”為校驗和識別符,其後面的兩位數為校驗和,代表了“$”和“*”之間所有字元(不包括這兩個字元)的異或值的十六進位值。上面這條例句的校驗和是十六進位的50,也就是十進位的80。

 

提示:^運算符的作用是異或。將$和*之間所有的字元做^運算(第一個字元和第二個字元異或,結果再和第三個字元異或,依此類推)之後的值對65536取餘後的結果,應該和*後面的兩個十六進位數字的值相等,否則的話說明這條語句在傳輸中發生了錯誤。註意這個十六進位值中是會出現A-F的大寫字母的。另外,如果你需要的話,可以用Integer.parseInt(s)從String變數s中得到其所表達的整數數字;而Integer.parseInt(s, 16)從String變數s中得到其所表達的十六進位數字

 

現在,你的程式要讀入一系列GPS輸出,其中包含$GPRMC,也包含其他語句。在數據的最後,有一行單獨的

END

表示數據的結束。

 

你的程式要從中找出$GPRMC語句,計算校驗和,找出其中校驗正確,並且欄位2表示已定位的語句,從中計算出時間,換算成北京時間。一次數據中會包含多條$GPRMC語句,以最後一條語句得到的北京時間作為結果輸出。

 

你的程式一定會讀到一條有效的$GPRMC語句。

 

輸入格式:

多條GPS語句,每條均以回車換行結束。最後一行是END三個大寫字母。

 

輸出格式:

6位數時間,表達為:

hh:mm:ss

其中,hh是兩位數的小時,不足兩位時前面補0;mm是兩位數的分鐘,不足兩位時前面補0;ss是兩位數的秒,不足兩位時前面補0。

 

輸入樣例:

$GPRMC,024813.640,A,3158.4608,N,11848.3737,E,10.05,324.27,150706,,,A*50

END

 

輸出樣例:

10:48:13

時間限制:500ms記憶體限制:32000kb
 1 import java.util.Scanner;
 2 
 3 public class Main {
 4 
 5     public static void main(String[] args) {
 6         // TODO Auto-generated method stub        
 7         Scanner in = new Scanner(System.in);        
 8         String strInput;    //用來存輸入的字元串
 9         char charInput[]=null;    //將輸入字元串轉化為數組        
10         int yihuo;    //用來存儲異或的結果
11         int jiaoyan;    //用來存計算出來的校驗碼        
12         String strLast;    //用來存代表校驗碼的子字元串
13         int intLast;    //將字元串校驗碼轉化為整型        
14         String UTC = null;    //用來存輸入的UTC時間
15         int hh=0;    //6位數時間
16         int mm=0;
17         int ss=0;
18         
19         do
20         {
21             strInput=in.nextLine();    //輸入GPS字元串
22             if(strInput.startsWith("$GPRMC"))    //如果字元串以此開頭
23             {
24                 charInput=strInput.toCharArray();    //字元串轉數組                
25                 yihuo=charInput[1];
26                 for(int i=2;charInput[i ]!='*';i ++)
27                 {
28                     yihuo=yihuo^charInput[i];
29                 }
30 //將$和*之間所有的字元做^運算(第一個字元和第二個字元異或,結果再和第三個字元異或,依此類推)
31                 jiaoyan=yihuo%65536;    //算出校驗碼
32                 strLast=strInput.substring(strInput.length()-2,strInput.length());    //得到後兩位檢驗碼字元串
33                 intLast=Integer.parseInt(strLast,16);    //從String變數strLast中得到其所表達的十六進位數字
34 //如果計算出的校驗碼和原信息中的校驗碼一致,則提取出原信息中的UTC時間子字元串                        
35                 if(jiaoyan==intLast)
36                 {
37                     UTC=strInput.substring(7,13);
38                 }
39             }            
40         }while(strInput.equals("END")==false);
41         
42             hh=Integer.parseInt(UTC.substring(0,2));
43             mm=Integer.parseInt(UTC.substring(2,4));
44             ss=Integer.parseInt(UTC.substring(4,6));
45             hh=hh+8;    //換算成北京時間
46             hh=hh%24;    //如果大於24小時
47             
48             System.out.printf("%02d:%02d:%02d",hh,mm,ss);
49 //hh是兩位數的小時,不足兩位時前面補0;mm是兩位數的分鐘,不足兩位時前面補0;ss是兩位數的秒,不足兩位時前面補0
50     }
51 }

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 模板方法模式(Template Method Pattern)是一種簡單的、常見的且應用非常廣泛的模式。 定義: 定義一個操作中演算法的框架,而將一些步驟延遲到子類中。使得子類可以不改變一個演算法的結構即可重定義該演算法的某些特定步驟。 模板方法模式的類圖如下所示。 模板方法模式涉及兩個角色: 抽象模板( ...
  • 海康&大華&DSS獲取RTSP 實時流 海康:rtsp://[username]:[password]@[ip]:[port]/[codec]/[channel]/[subtype]/av_stream說明:username: 用戶名。例如admin。password: 密碼。例如12345。ip: ...
  • 命令模式(Command Pattern)又稱為行動(Action)模式或交易(Transaction)模式。 定義: 將一個請求封裝成一個對象,從而讓你使用不同的請求把客戶端參數化,對請求排隊或記錄請求日誌,可以提供命令的撤銷和恢復功能。 命令模式類圖如下所示。 命令模式中有如下4個角色。 命令( ...
  • 搬到小機房後終於能用VSCode啦(~~沒錯以前的系統是xp~~) 但是這東西比Dev難搞多了qwq,簡單記一下自己的DIY歷程吧(~~不然全搞炸就涼了~~) 設置語言為中文 可以直接下載插件 讓VSCode支持編譯C++程式 首先要有MingW,一個很simple的方法是直接把DevC++的Min ...
  • 代理模式是一種很常用的模式,JDK也內置了對於代理的支持,動態代理,本文對代理模式進行了介紹,意圖,結構,java實現,對靜態代理和動態代理進行了分析,並且給出了代碼示例,並且介紹了CGLIB的使用。 ...
  • 外觀模式又稱為門面模式Facade是一種簡單的設計模式,但是他背後的思想為迪米特原則,理解門面模式更有助於理解迪米特原則--不要和陌生人說話的原則,可以降低系統的耦合程度,本文介紹了外觀模式的意圖,結構,並且給出了java代碼示例。 ...
  • List 是 Java 開發中經常會使用的集合,你們知道有哪些方式可以初始化一個 List 嗎?這其中不缺乏一些坑,今天棧長我給大家一一普及一下。 1、常規方式 這種就是我們平常用的最多最平常的方式了,沒什麼好說的,後面缺失的泛型類型在 JDK 7 之後就可以不用寫具體的類型了,改進後會自動推斷類型 ...
  • 前言 開心一刻 已經報廢了一年多的電腦,今天特麽突然開機了,嚇老子一跳,只見電腦管家緩緩地出來了,本次開機一共用時一年零六個月,打敗了全國0%的電腦,電腦管家已經對您的電腦失去信心,然後它把自己卸載了,只剩我在一旁發呆。 路漫漫其修遠兮,吾將上下而求索! github:https://github. ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...