/**
*通过解析google map返回的xml,在map中画路线图
*
*/
public void drawRoute()
{
String url = "http://maps.google.com/maps/api/directions/xml?origin=23.055291,113.391802" +
"&destination=23.046604,113.397510&sensor=false&mode=walking";
HttpGet get = new HttpGet(url);

String strResult = "";
try
{
HttpParams httpParameters = new BasicHttpParams();
HttpConnectionParams.setConnectionTimeout(httpParameters, 3000);
HttpClient httpClient = new DefaultHttpClient(httpParameters);
HttpResponse httpResponse = null;

httpResponse = httpClient.execute(get);
if (httpResponse.getStatusLine().getStatusCode() == 200)
{
strResult = EntityUtils.toString(httpResponse.getEntity());
}
}
catch (Exception e)
{
return;
}

if (-1 == strResult.indexOf("<status>OK</status>"))
{
Toast.makeText(this, "获取导航路线失败!", Toast.LENGTH_SHORT).show();
this.finish();
return;
}

int pos = strResult.indexOf("<overview_polyline>");
pos = strResult.indexOf("<points>", pos + 1);
int pos2 = strResult.indexOf("</points>", pos);
strResult = strResult.substring(pos + 8, pos2);
List<GeoPoint> points = decodePoly(strResult);

for(int i=0; i<points.size(); i++)
{
System.out.println(points.get(i).toString());
}

//MyOverLay mOverlay = new MyOverLay(points);
List<Overlay> overlays = mMapView.getOverlays();
//overlays.add(mOverlay);

if (points.size() >= 2)
{
mMapController.animateTo(points.get(0));
}
mMapView.invalidate();
}

/**
* 解析返回xml中overview_polyline的路线编码
*
* @param encoded
* @return
*/
private List<GeoPoint> decodePoly(String encoded)
{
List<GeoPoint> poly = new ArrayList<GeoPoint>();
int index = 0, len = encoded.length();
int lat = 0, lng = 0;
while (index < len)
{
int b, shift = 0, result = 0;
do
{
b = encoded.charAt(index++) - 63;
result |= (b & 0x1f) << shift;
shift += 5;
} while (b >= 0x20);
int dlat = ((result & 1) != 0 ? ~(result >> 1) : (result >> 1));
lat += dlat;
shift = 0;
result = 0;
do
{
b = encoded.charAt(index++) - 63;
result |= (b & 0x1f) << shift;
shift += 5;
} while (b >= 0x20);
int dlng = ((result & 1) != 0 ? ~(result >> 1) : (result >> 1));
lng += dlng;
GeoPoint p = new GeoPoint((int) (((double) lat / 1E5) * 1E6),
(int) (((double) lng / 1E5) * 1E6));
poly.add(p);
}
return poly;
}

更多相关文章

  1. "Failed to fetch URL https://dl-ssl.google.com/android/repos
  2. Android(安卓)P SystemUI之StatusBar UI布局status_bar.xml解析
  3. Android内容提供者源码
  4. android通过ksoap2对webservice的解析
  5. Android:使用OkHttp解析Json遇到的坑
  6. android 单元测试
  7. Android最全面试题库(转)
  8. 【安卓笔记】android客户端与服务端交互的三种方式
  9. Android(安卓)属性动画(Property Animation) 完全解析 (下)

随机推荐

  1. PHP:oop->细说命名空间/命名空间类的自动
  2. js的for和php的for
  3. 4-29数组系统函数的操作
  4. 210428 PHP 函数 返回值 参数 闭包/匿名
  5. 【PHP 面向对象】面向对象(OOP)编程之解
  6. 12345
  7. 美团App插件化实践
  8. 【直播】美团点评技术沙龙Online006: WWD
  9. 美团App 插件化实践
  10. 美团点评旅游搜索召回策略的演进