我开发了一个使用谷歌地图并在地图上绘制从 A 点到 B 点的路线路径的 Android 应用程序。我已经使用了这篇文章中提到的方法,一切正常。这几天在模拟器和手机上测试了结果,路由路径绘制成功。
然而,在没有修改任何代码的情况下,今天我意识到路线路径绘制失败并且应用程序崩溃了。正如我所期望的那样,我使用以下代码来“构建”用于 KML 文件生成的 uri 链接:
public static String getUrl(double fromLat, double fromLon, double toLat,
double toLon) {// connect to map web service
StringBuffer urlString = new StringBuffer();
urlString.append("http://maps.google.com/maps?f=d&hl=en");
urlString.append("&saddr=");// from
urlString.append(Double.toString(fromLat));
urlString.append(",");
urlString.append(Double.toString(fromLon));
urlString.append("&daddr=");// to
urlString.append(Double.toString(toLat));
urlString.append(",");
urlString.append(Double.toString(toLon));
urlString.append("&ie=UTF8&0&om=0&output=kml");
return urlString.toString();
}
此函数为 kml 文件返回类似“ http://maps.google.com/maps?f=d&hl=en&saddr=35.5133804,24.0421933&daddr=35.511732,23.974715&ie=UTF8&0&om=0&output=kml ”的 Uri。然而,经过实验,我意识到现在使用与上面完全相同的 KML 链接,SAX 解析器会尝试解析整个 Google 地图网页源代码!当我的应用程序运行时,我正在下载生成的 kml 文件并在本地成功解析,格式如下:
?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://earth.google.com/kml/2.0">
<Document>
...
</Document>
</kml>
相比之下,现在下载的文件是整个谷歌地图网页,格式如下:
<!DOCTYPE html><html xmlns:v="urn:schemas-microsoft-com:vml">
<head>
<meta content="text/html;charset=ISO-8859-1" http-equiv="content-type"/>
<meta content="Find local businesses, view maps and get driving directions in
Google Maps" name="description"/> <link href="//maps.gstatic.com/favicon.ico"
rel="shortcut icon"/>
<noscript> <meta content="0; URL=/m/directions?dirflg=&saddr=35.5133804,24.0421933&daddr=35.511732,23.974715&
amp;hl=en&oi=nojs" http-equiv="refresh"/> </noscript> <title>
...
tick('ua');var id = 'none';if (event.target){id =
closestParentId(event.target);}else if (event.srcElement){
id = closestParentId(event.srcElement);}
var firstUserAction = event.type + '-' + id;
当然,这是字面的 Google 地图网页源,当我从我的 PC 上查看页面时,它会显示路线路径。所以我的问题是,是否有人遇到过像这样开始发生的同样非常奇怪的问题。
谢谢!