我一直在努力研究如何获得两个地点之间的旅行时间(步行,驾驶等)。
据我了解,准确执行此操作的唯一方法是从谷歌检索KML文件,然后解析它。
研究表明,它需要用SAX解析。问题是,我似乎无法弄清楚如何提取正确的变量(时间)。有人知道是否/如何做到这一点?
非常感谢你的帮助,
皮特。
答案 0 :(得分:1)
使用SAX-Parser解析XML(KML基本上是什么):http://www.dreamincode.net/forums/blog/324/entry-2683-parsing-xml-in-java-part-1-sax/
<kml>
<Document>
<Placemark>
<name>Route</name>
<description>Distance: 1.4 mi (about 30 mins)<br/>Map data ©2011 Tele Atlas </description>
</Placemark>
</Document>
</kml>
在示例中,您可以看到,猜测的时间存储在“描述”-Tag中。它保存在KML文件的最后一个“地标”-Tag中,并且有一个“<name>Route</name>
” - 标记。
使用SAX-Parser获取此标记并使用正则表达式提取时间应该很容易。
答案 1 :(得分:1)
这是我获取曲目的JSOUP实现
public ArrayList<ArrayList<LatLng>> getAllTracks() {
ArrayList<ArrayList<LatLng>> allTracks = new ArrayList<ArrayList<LatLng>>();
try {
StringBuilder buf = new StringBuilder();
InputStream json = MyApplication.getInstance().getAssets().open("track.kml");
BufferedReader in = new BufferedReader(new InputStreamReader(json));
String str;
while ((str = in.readLine()) != null) {
buf.append(str);
}
in.close();
String html = buf.toString();
Document doc = Jsoup.parse(html, "", Parser.xmlParser());
ArrayList<String> tracksString = new ArrayList<String>();
for (Element e : doc.select("coordinates")) {
tracksString.add(e.toString().replace("<coordinates>", "").replace("</coordinates>", ""));
}
for (int i = 0; i < tracksString.size(); i++) {
ArrayList<LatLng> oneTrack = new ArrayList<LatLng>();
ArrayList<String> oneTrackString = new ArrayList<String>(Arrays.asList(tracksString.get(i).split("\\s+")));
for (int k = 1; k < oneTrackString.size(); k++) {
LatLng latLng = new LatLng(Double.parseDouble(oneTrackString.get(k).split(",")[0]), Double.parseDouble(oneTrackString.get(k)
.split(",")[1]));
oneTrack.add(latLng);
}
allTracks.add(oneTrack);
}
} catch (Exception e) {
e.printStackTrace();
}
return allTracks;
}