8

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

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

提前致谢!最好的问候,NR。

4

4 回答 4

5

我会将用于 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
        }
    }
});

欢迎投稿。

于 2016-01-24T11:09:06.187 回答
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());
  }
}
于 2013-09-06T15:27:25.283 回答
1

更新:我还添加了解析“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 文件。抱歉,它不在常规回购中,我还没有打算分享它。

于 2013-09-06T15:15:15.007 回答
1

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

https://github.com/urizev/j4gpx

于 2015-05-27T08:41:44.160 回答