【问题标题】:GPX Parser for Java? [closed]Java的GPX解析器? [关闭]
【发布时间】:2011-03-30 12:46:13
【问题描述】:

是否有任何用于解析 GPX 文件的 Java 库?我需要将许多 GPX 文件解析成我们自己的数据结构(我们自己的数据库)。

【问题讨论】:

    标签: java parsing api gpx


    【解决方案1】:

    这个问题太老了,答案也太老了。 感谢开源世界,我们现在拥有jgpx, on google code (forked multiple times on github) 和GPXParser, on sourceforge.neta search on 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 操作系统绑定。
    【解决方案2】:

    经过一番研究,确实没有用于解析 GPX 文件的 Java API/Lib,但我发现了一种使用 JAXB 解析它的好方法

    使用本教程:http://www.oracle.com/technetwork/articles/javase/index-140168.html

    步骤:
    1. 下载 GPX 1.0 和 1.1 Schema 文件 (xsd)
    2. 使用Eclipse Plugin从中生成Java文件
    3. 使用生成的 GPX java 文件的包名初始化 JAXBContext(我的是“topografix.gpx.schema10”)
    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();
    ....
    

    【讨论】:

    【解决方案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

    -肯

    【讨论】:

    • 是的,我知道,为简单起见,我省略了 try-catch 块,对于生产代码,您必须同时支持 1.0 和 1.1(因此您和我的代码结合在一起)。我所做的是首先尝试使用 schema10 解组,如果它引发异常,我尝试使用 schema11(对于 1.1)。如果再次失败,则该文件不是受支持的 GPX 文件。
    【解决方案4】:

    即用型、开源且功能齐全的 java GpxParser(以及更多)在这里 https://sourceforge.net/projects/geokarambola/

    这里有详细信息 https://plus.google.com/u/0/communities/110606810455751902142

    使用上面的库来解析 GPX 文件是一件很简单的事情:

    Gpx gpx = GpxFileIo.parseIn( "SomeGeoCollection.gpx" ) ;
    

    获得它的点、路线或轨迹也很简单:

    ArrayList<Route> routes = gpx.getRoutes( ) ;
    

    【讨论】:

    • 我试试看。将它放在 github 和/或作为 maven 存储库会很高兴
    【解决方案5】:

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

    【讨论】:

    • 由于 GPX 的传播非常广泛,我认为应该有一些 lib/api。因为我不想从头开始,尤其是如果有人应该已经这样做了。
    猜你喜欢
    • 2012-01-28
    • 2023-03-26
    • 2012-07-21
    • 2011-02-28
    • 2011-06-19
    • 2010-10-14
    • 2014-07-15
    • 2011-07-25
    • 2010-09-27
    相关资源
    最近更新 更多