android地图导航

本文介绍如何通过解析Google Map返回的XML数据,实现在线路图中绘制从起点到终点的路线。包括HTTP请求、XML解析及路线图显示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    /** 
    *通过解析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;
 }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值