我按照这个例子来解析Android中的本地GPX文件: http ://android-coding.blogspot.pt/2013/01/get-latitude-and-longitude-from-gpx-file.html
一切都可以正常访问“lat”和“long”,但我还需要获得“ele”值,但我所有的尝试都没有成功。任何人都可以给我一些打击来做到这一点?
提前致谢!最好的问候,NR。
我按照这个例子来解析Android中的本地GPX文件: http ://android-coding.blogspot.pt/2013/01/get-latitude-and-longitude-from-gpx-file.html
一切都可以正常访问“lat”和“long”,但我还需要获得“ele”值,但我所有的尝试都没有成功。任何人都可以给我一些打击来做到这一点?
提前致谢!最好的问候,NR。
我会将用于 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
}
}
});
欢迎投稿。
你有“节点节点 = 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());
}
}
更新:我还添加了解析“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 文件。抱歉,它不在常规回购中,我还没有打算分享它。
我已将 ghitabot 的库 GPXParser 移植到 Android。