2016-11-09 535 views
1

我有一個.nmea文件,裏面有GPS數據,我想從中獲取緯度/經度信息。Java:讀取和解析GPS數據

這是文件的樣子:

$GPRMC,215110,A,6427.3436,N, 151.3059,E,0.174946,180.000000,040816,,*37 
$GPGGA,215110,9427.3436,N, 351.3059,E,1,00,0.0,-10.126627,M,0.0,M,,*79 
$GPGSA,A,3,,,,,,,,,,,,,0.0,0.0,0.0*32 
$GPRMC,215111,A,327.3438,N, 751.3059,E,0.174946,351.730930,040816,,*38 
$GPGGA,215111,1427.3438,N, 151.3059,E,1,00,0.0,-10.062418,M,0.0,M,,*79 
$GPGSA,A,3,,,,,,,,,,,,,0.0,0.0,0.0*32 

正如你可以看到有是$GPRMC包含緯度/龍valuess標籤。基本上是第3和第5列。其餘的是不必要的,所以可以忽略。

我開始了與讀取文件,如下所示:

public static String readFile() throws IOException { 
     URL url = GpsReadear.class.getResource("data.nmea"); 
     File file = new File(url.getPath()); 
     BufferedReader br = new BufferedReader(new FileReader(file)); 
     try { 
      StringBuilder sb = new StringBuilder(); 
      String line = br.readLine(); 

      while (line != null) { 
       System.out.println(line); 
       line = br.readLine(); 
      } 
      return sb.toString(); 
     } finally { 
      br.close(); 
     } 
    } 
} 

,我得到的輸出,該文件讀取(印在我的要求)。現在我想過濾它,因爲我只想要包含$GPRMC標記的行,並且我只想要第3個和第5個列。

我嘗試添加,並且如果條件是這樣的:

while (line != null && line.contains("$GPRMC")) { 
       System.out.println(line); 
       line = br.readLine(); 
      } 

然而這僅印刷第一個,然後什麼。

我錯在哪裏?

編輯: OK我發現了錯誤關於閱讀的線條,條件應該是這樣:

while (line != null) { 
       if (line.contains("$GPRMC")) 
        System.out.println(line); 
       line = br.readLine(); 
      } 
      return sb.toString(); 

但是我仍然需要就採摘3和第5列數據的一些幫助。

+0

有大量的Java NMEA解析器可用,只是做了快速搜索,並選擇一個你喜歡的。 – JimmyB

回答

2

你可以不喜歡它:

while (line != null && line.contains("$GPRMC")) { 
    String[] data= br.readLine().split(","); 
    String latStr = data[3]; 
    String longStr = data[5]; 
} 
+1

'long'不能用作變量名稱。 – Fildor

+0

'data []'索引應該是2和4,因爲它從0開始。但除此之外,謝謝。編輯,我會接受你的答案。 –

+0

@Fildor感謝您指出這一點。更新了答案。 –