分享

android google map路网展示(转一个方法)

 w_hf的图书馆 2012-12-24

android google map路网展示(转一个方法)

在网上找到一个同学的方法,挺强大的,分享一下。

这个方法是调用google map direction方法,解析返回的路线数据,然后画到地图上。

直接给出两个函数:

public void routeShow(String startPoint,String endPoint)
    {
    Log.i("start point",startPoint);
    Log.i("end point",endPoint);
    String url ="http://maps.google.com/maps/api/directions/xml?origin="+String.valueOf(startPoint)+  
         "&destination="+String.valueOf(endPoint)+"&sensor=false&mode=driving";  
    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);  
     Polyline mOverlay = new  Polyline(points,methodSelected);  //这个是一个画直线的方法
     List<Overlay> overlays = mapView.getOverlays();  
         overlays.add(mOverlay);  
         routePolyline.add(mOverlay);
       if  (points.size() >=  2 ){  
           mapController.animateTo(points.get(0));  
      }  
     mapView.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;  
}

 

看下效果:

现在google map 并没有对android 的map sdk 进行direction的封装,所以还是调用web的方式,这个比较慢。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多