Java的GPX解析器?

9
有没有适用于解析GPX文件的Java库?我需要将多个GPX文件解析为我们自己的数据结构(即我们自己的数据库)。
5个回答

10

这个问题太老了,答案也是。感谢开源世界,我们现在有了jgpx,在google code上(在Github上分叉多次)和GPXParser,在sourceforge.net上。还有许多Github搜索结果

我不确定哪一个更成熟(它们中的其中一个标记为Alpha),但您可以尝试它们并在此处告诉我们。

编辑

看一下processing-gpx,它看起来很有前途。

这里是一个快速示例:

import tomc.gpx.*;

// outside setup()
GPX gpx;

  // inside setup()
  gpx = new GPX(this);

  // when you want to load data
  gpx.parse("test.gpx"); // or a URL

  // inside draw()
  for (int i = 0; i < gpx.getTrackCount(); i++) {
    GPXTrack trk = gpx.getTrack(i);
    // do something with trk.name
    for (int j = 0; j < trk.size(); j++) {
      GPXTrackSeg trkseg = trk.getTrackSeg(j);
      for (int k = 0; k < trkseg.size(); k++) {
        GPXPoint pt = trkseg.getPoint(k);
        // do something with pt.lat or pt.lon
      }
    }
  }

  for (int i = 0; i < gpx.getWayPointCount(); i++) {
    GPXWayPoint wpt = gpx.getWayPoint(i);
    // do something with wpt.lat or wpt.lon or wpt.name or wpt.type
  }

它与Android操作系统相关联。 - David George

7
经过一些研究,实际上没有用于解析GPX文件的Java API/Lib,但我找到了一种使用JAXB解析它的好方法。
使用这个教程:http://www.oracle.com/technetwork/articles/javase/index-140168.html 步骤:
1. 下载GPX 1.0和1.1模式文件(xsd)
2. 使用Eclipse插件从中生成Java文件
3. 使用生成的GPX Java文件包名称(我的是“topografix.gpx.schema10”)初始化JAXBContext
4. 解析GPX文件
JAXBContext jc = JAXBContext.newInstance("topografix.gpx.schema10");
Unmarshaller unmarshaller = jc.createUnmarshaller();
Gpx root = (Gpx) unmarshaller.unmarshal(new File("sample.gpx"));
List<Trk> tracks = root.getTrk();
....

Eclipse插件:链接失效了 :( 或许可以尝试 http://sourceforge.net/projects/jaxb-builder/ ? - Diederik
这是一个更快入门的好地方:http://www.youtube.com/watch?v=Ip0T91q70PA - Mohamed Taher Alrefaie

3
非常好。然而,我需要做以下事情:
    GpxType gpx = null;
    try {
        JAXBContext jc = JAXBContext.newInstance(PACKAGE_NAME);
        Unmarshaller unmarshaller = jc.createUnmarshaller();
        JAXBElement<GpxType> root = (JAXBElement<GpxType>)unmarshaller
            .unmarshal(new File(TEST_FILE));
        gpx = root.getValue();
    } catch(JAXBException ex) {
       // TODO
    }

    List<TrkType> tracks = gpx.getTrk();
    for(TrkType track : tracks) {
        System.out.println(track.getName());
    }

顺便提一下,我使用了http://www.topografix.com/GPX/1/1

-Ken


是的,我知道,为了简单起见,我省略了try-catch块,对于生产代码,您必须支持1.0和1.1(因此需要结合您的代码和我的代码)。我所做的是首先尝试使用schema10进行取消编组,如果它引发异常,则尝试使用schema11(用于1.1)。如果再次失败,则该文件不是受支持的GPX文件。 - Buju

3

2
我会尝试一下。如果能在Github上和/或作为Maven仓库就太好了。 - ianaz

0

我不知道有没有专门用于解析GPX文件的库,但是由于GPX是XML格式,您可以使用您喜欢的Java XML解析器来读取它。
GPX格式在这里有文档(包括XSD模式): http://www.topografix.com/gpx.asp


1
由于GPX非常广泛,我认为应该有一些库/ API可以处理它。因为我不想从头开始,特别是如果已经有人做过了。 - Buju

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接