【问题标题】:Parsing local gpx file in Android在Android中解析本地gpx文件
【发布时间】:2013-09-10 17:33:42
【问题描述】:

我按照这个例子在 Android 中解析了一个本地 GPX 文件: http://android-coding.blogspot.pt/2013/01/get-latitude-and-longitude-from-gpx-file.html

所有工作都可以访问“lat”和“long”,但我还需要获得“ele”值,但我所有的尝试都没有成功。 任何人都可以给我一些点击来做到这一点?

提前致谢! 最好的祝福, NR。

【问题讨论】:

    标签: android xml-parsing gpx


    【解决方案1】:

    我会将用于 GPX 解析的库添加到这些答案中:https://github.com/ticofab/android-gpx-parser。它提供了两种解析 GPX 文件的方法:一旦获得/创建 GPXParser 对象(在下面的示例中为mParser),您就可以直接解析您的 GPX 文件

    Gpx parsedGpx = null;
    try {
        InputStream in = getAssets().open("test.gpx");
        parsedGpx = mParser.parse(in);
    } catch (IOException | XmlPullParserException e) {
        e.printStackTrace();
    }
    if (parsedGpx == null) {
        // error parsing track
    } else {
        // do something with the parsed track
    }
    

    或者你可以解析一个远程文件:

    mParser.parse("http://myserver.com/track.gpx", new GpxFetchedAndParsed() {
        @Override
        public void onGpxFetchedAndParsed(Gpx gpx) {
            if (gpx == null) {
                // error parsing track
            } else {
                // do something with the parsed track
            }
        }
    });
    

    欢迎投稿。

    【讨论】:

    • 你能告诉我如何使用你的库解析 GPx 文件中的扩展名
    • 嘿@Prasad 我已经看到你的issue on GitHub,但还没有时间处理它。随意添加功能并打开拉取请求:)
    【解决方案2】:

    我已将 ghitabot 的库 GPXParser 移植到 Android。

    https://github.com/urizev/j4gpx

    【讨论】:

    • 如何在工作室使用?
    • @Prasad 将 jar 文件添加到 libs 文件夹中
    • 这个库将支持 gpx 文件中的扩展
    • @Prasad 我不知道这是一个问题还是一个肯定。我会假设这是一个问题。我不确定该库是否支持扩展,因为我是从 SourceForge 项目移植它并修复了一些问题。但是我从来没有在库中使用过扩展。如果您希望可以在代码中查看。
    【解决方案3】:

    更新:我也添加了解析“ele”元素,所以这段代码可以满足你的要求。

    我会提出不同的方法:https://gist.github.com/kamituel/6465125

    在我的方法中,我不会创建所有跟踪点的 ArrayList(这是在您发布的示例中完成的)。这样的列表会消耗大量内存,这在 Android 上可能是个问题。

    我什至放弃了使用正则表达式解析来避免分配太多对象(这会导致垃圾收集器运行)。

    因此,运行 16Mb 堆大小的 Java,解析超过 600 个点的 GPX 文件,垃圾收集器将只运行 12 次。我确信可以降低,但我还没有进行大量优化。

    用法:

    GpxParser parser = new GpxParser(new FileInputStream(file));
    TrkPt point = null;
    while ((point = parser.nextTrkPt()) != null) {
      // point.getLat()
      // point.getLon()
    }
    

    我已经成功地使用此代码在 Android 上解析了大约 100 Mb 的 GPX 文件。抱歉,它不在常规仓库中,我还没有打算分享它。

    【讨论】:

      【解决方案4】:

      你有“节点节点 = nodelist_trkpt.item(i);”在你的第一个循环中。 从此节点获取子元素并遍历这些子元素。

      例如:

      NodeList nList = node.getChildNodes();
      for(int j=0; j<nList.getLength(); j++) {
          Node el = nList.item(j);
          if(el.getNodeName().equals("ele")) {
           System.out.println(el.getTextContent());
        }
      }
      

      【讨论】:

        猜你喜欢
        • 2011-02-28
        • 2022-08-02
        • 2012-01-28
        • 2010-11-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-12-28
        • 2012-06-06
        相关资源
        最近更新 更多