Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/341.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java:读取和解析GPS数据_Java - Fatal编程技术网

Java:读取和解析GPS数据

Java:读取和解析GPS数据,java,Java,我有一个.nmea文件,里面有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.343

我有一个
.nmea
文件,里面有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
的标记包含Lat/Long值。基本上是第三列和第五列。其余部分完全没有必要,因此可以忽略

我开始阅读该文件,如下所示:

    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();
            }
然而,这只打印了第一个,然后什么也没有

我哪里弄错了

编辑:好的,我发现了读这些行的错误,条件应该是:

while (line != null) {
                if (line.contains("$GPRMC"))
                    System.out.println(line);
                line = br.readLine();
            }
            return sb.toString();
但是,关于选择第3列和第5列数据,我仍然需要一些帮助。

您可以像这样做:

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

long
不能用作变量名。
data[]
索引应该是2和4,因为它从0开始。除此之外,谢谢。编辑,我会接受你的答案。仍然是3和4:0=“$GPRMC”或否?[0:$GPRMC”、1:$215110”、2:“A”、3:“6427.3436”、4:“N”、5:“151.3059”…]是的,应该是3和5,有很多Java NMEA解析器可用,只需快速搜索并选择一个您喜欢的。