我按照此示例解析Android中的本地GPX文件: http://android-coding.blogspot.pt/2013/01/get-latitude-and-longitude-from-gpx-file.html
一切正常,可以访问“lat”和“long”,但我还需要获得“ele”值,但我的所有试验都没有成功。 任何人都可以给我一些命中率吗?
提前致谢! 最好的祝福, NR。
答案 0 :(得分:4)
我将我的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
}
}
});
欢迎捐款。
答案 1 :(得分:2)
你有“Node node = nodelist_trkpt.item(i);”在你的第一个循环中。 从这个节点获取子元素并运行这些子元素。
e.g:
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());
}
}
答案 2 :(得分: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文件。对不起,它不在常规仓库中,我还没打算分享它。
答案 3 :(得分:1)
我已将ghitabot的图书馆GPXParser移植到Android。