title: Draw routes between current location to another locations in android?
body: <p>I am drawing route between one location to another location successfully using <a href="http://iamvijayakumar.blogspot.in/2013/04/android-draw-route-between-two-geo.html" rel="nofollow">http://iamvijayakumar.blogspot.in/2013/04/android-draw-route-between-two-geo.html</a> this link, now I am trying to draw routes between current location to all locations what I have my arrylist.But here add one route only from current location to last element of arrylist. But I want to draw routes from my current location to all locations.</p>
  
  <p>Below is the code : </p>
  
  <pre><code>public class ShowAllRoutesFromCurrentLoc extends FragmentActivity implements LocationListener {
  
  GoogleMap _googlemap;
  LocationManager locationManager;
  private LatLng myPosition;
  private LatLng dabaseLocations;
  Document document;
  private GMapV2Direction v2GetRouteDirection;
  private ArrayList&lt;HashMap&lt;String, String&gt;&gt; arl;
  private ArrayList&lt;LatLng&gt; dbList;
  
  
  @Override
  protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_shoe_all_routes_from_current_loc);
  
      _googlemap = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(
              R.id.mapRotes)).getMap(); 
      v2GetRouteDirection = new GMapV2Direction();
      locationManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
      Criteria criteria = new Criteria();
      String provider = locationManager.getBestProvider(criteria, true);
      locationManager.requestLocationUpdates(provider, 0, 0, this);
      arl=(ArrayList&lt;HashMap&lt;String, String&gt;&gt;) 
              getIntent().getSerializableExtra("arrayList");
      dbList = new ArrayList&lt;LatLng&gt;();
      Log.e("SHOW LOGIN", arl.toString());
        if(arl.size()!=0){
  
  
            for(int j = 0;j&lt;arl.size();j++){
  
          String lat =arl.get(j).get("lat").toString();
          String lng =arl.get(j).get("lng").toString();
          if ( !lat.trim().equals("") &amp;&amp; !lng.trim().equals("") ) {
          double Hlat = Double.parseDouble(lat.trim());
          double Hlong= Double.parseDouble(lng.trim());
  
           dabaseLocations =new LatLng(Hlat, Hlong);
           dbList.add(dabaseLocations);
        Log.e("ARRAY1",""+dbList.size());
  
             }
           }
  
     }
  
  
  }
  
  @Override
  public boolean onCreateOptionsMenu(Menu menu) {
      // Inflate the menu; this adds items to the action bar if it is present.
      getMenuInflater()
              .inflate(R.menu.shoe_all_routes_from_current_loc, menu);
      return true;
  }
  
  @Override
  public void onLocationChanged(Location location) {
      // TODO Auto-generated method stub
  
      //_googlemap.clear();
  
  
  
              if(location!=null){
                  double latitude = location.getLatitude();
                  double langitude = location.getLongitude();
  
  
                  myPosition = new LatLng(latitude, langitude);
  
              }
  
  
                   (new GetRouteAsync()).execute();
  
  
  }
  
  @Override
  public void onProviderDisabled(String provider) {
      // TODO Auto-generated method stub
  
  }
  
  @Override
  public void onProviderEnabled(String provider) {
      // TODO Auto-generated method stub
  
  }
  
  @Override
  public void onStatusChanged(String provider, int status, Bundle extras) {
      // TODO Auto-generated method stub
  
  }
  private class GetRouteAsync extends AsyncTask&lt;String, Void, String&gt;{
  
      private ArrayList&lt;String&gt; alter;
      private ArrayList&lt;LatLng&gt; directionPoint;
      private PolylineOptions rectLine;
      @Override
      protected String doInBackground(String... params) {
          // TODO Auto-generated method stub
             Log.e("ARRAY2",""+dbList.size());
          for(int k=0;k&lt;dbList.size();k++){
          document = v2GetRouteDirection.getDocument(myPosition, 
      dbList.get(k),GMapV2Direction.MODE_DRIVING,dbList.size());
          }
          return null;
      }
      @Override
      protected void onPostExecute(String result) {
          // TODO Auto-generated method stub
          super.onPostExecute(result);
          _googlemap.clear();
  
            for(int k=0;k&lt;dbList.size();k++){
               directionPoint =v2GetRouteDirection.getSingleDirection(document);
               rectLine = new 
      PolylineOptions().width(5).color(Color.RED).geodesic(true);
  
                  for (int i = 0; i &lt; directionPoint.size(); i++) {
  
                      rectLine.add(directionPoint.get(i));
  
                  }
  
  
  
          _googlemap.addPolyline(rectLine);
           _googlemap.moveCamera(CameraUpdateFactory.newLatLngZoom(myPosition,10)); 
             Log.e("ARRAY3",""+dbList.size());
  
          Marker HYD = _googlemap.addMarker(new MarkerOptions()
  
                                 .position(dbList.get(k))
                                .icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_RED))
                                 .flat(true));
  
  
          // Show current location with database locations
  
  
           Marker m=_googlemap.addMarker(new MarkerOptions()
                            .position(myPosition).title("start")
  
      .icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_AZURE)));
                          //   HYD.setPosition(new LatLng(5,5));
  
  
  
             }
  
  }
  
     }
  
   }
  
  GMapV2GetRouteDirection.java
  
  public class GMapV2GetRouteDirection {
  public final static String MODE_DRIVING = "driving";
  public final static String MODE_WALKING = "walking";
  
  public GMapV2GetRouteDirection() { }
  
  public Document getDocument(LatLng start, LatLng end, String mode) {
      String url = "http://maps.googleapis.com/maps/api/directions/xml?"
              + "origin=" + start.latitude + "," + start.longitude 
              + "&amp;destination=" + end.latitude + "," + end.longitude
              + "&amp;sensor=false&amp;units=metric&amp;mode=driving";
  
      try {
          HttpClient httpClient = new DefaultHttpClient();
          HttpContext localContext = new BasicHttpContext();
          HttpPost httpPost = new HttpPost(url);
          HttpResponse response = httpClient.execute(httpPost, localContext);
          InputStream in = response.getEntity().getContent();
          DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
          Document doc = builder.parse(in);
          return doc;
      } catch (Exception e) {
          e.printStackTrace();
      }
      return null;
  }
  
  public String getDurationText (Document doc) {
      NodeList nl1 = doc.getElementsByTagName("duration");
      Node node1 = nl1.item(0);
      NodeList nl2 = node1.getChildNodes();
      Node node2 = nl2.item(getNodeIndex(nl2, "text"));
      Log.i("DurationText", node2.getTextContent());
      return node2.getTextContent();
  }
  
  public int getDurationValue (Document doc) {
      NodeList nl1 = doc.getElementsByTagName("duration");
      Node node1 = nl1.item(0);
      NodeList nl2 = node1.getChildNodes();
      Node node2 = nl2.item(getNodeIndex(nl2, "value"));
      Log.i("DurationValue", node2.getTextContent());
      return Integer.parseInt(node2.getTextContent());
  }
  
  public String getDistanceText (Document doc) {
      NodeList nl1 = doc.getElementsByTagName("distance");
      Node node1 = nl1.item(0);
      NodeList nl2 = node1.getChildNodes();
      Node node2 = nl2.item(getNodeIndex(nl2, "text"));
      Log.i("DistanceText", node2.getTextContent());
      return node2.getTextContent();
  }
  
  public int getDistanceValue (Document doc) {
      NodeList nl1 = doc.getElementsByTagName("distance");
      Node node1 = nl1.item(0);
      NodeList nl2 = node1.getChildNodes();
      Node node2 = nl2.item(getNodeIndex(nl2, "value"));
      Log.i("DistanceValue", node2.getTextContent());
      return Integer.parseInt(node2.getTextContent());
  }
  
  public String getStartAddress (Document doc) {
      NodeList nl1 = doc.getElementsByTagName("start_address");
      Node node1 = nl1.item(0);
      Log.i("StartAddress", node1.getTextContent());
      return node1.getTextContent();
  }
  
  public String getEndAddress (Document doc) {
      NodeList nl1 = doc.getElementsByTagName("end_address");
      Node node1 = nl1.item(0);
      Log.i("StartAddress", node1.getTextContent());
      return node1.getTextContent();
  }
  
  public String getCopyRights (Document doc) {
      NodeList nl1 = doc.getElementsByTagName("copyrights");
      Node node1 = nl1.item(0);
      Log.i("CopyRights", node1.getTextContent());
      return node1.getTextContent();
  }
  
  public ArrayList&lt;LatLng&gt; getDirection (Document doc) {
      NodeList nl1, nl2, nl3;
      ArrayList&lt;LatLng&gt; listGeopoints = new ArrayList&lt;LatLng&gt;();
      nl1 = doc.getElementsByTagName("step");
      if (nl1.getLength() &gt; 0) {
          for (int i = 0; i &lt; nl1.getLength(); i++) {
              Node node1 = nl1.item(i);
              nl2 = node1.getChildNodes();
  
              Node locationNode = nl2.item(getNodeIndex(nl2, "start_location"));
              nl3 = locationNode.getChildNodes();
              Node latNode = nl3.item(getNodeIndex(nl3, "lat"));
              double lat = Double.parseDouble(latNode.getTextContent());
              Node lngNode = nl3.item(getNodeIndex(nl3, "lng"));
              double lng = Double.parseDouble(lngNode.getTextContent());
              listGeopoints.add(new LatLng(lat, lng));
  
              locationNode = nl2.item(getNodeIndex(nl2, "polyline"));
              nl3 = locationNode.getChildNodes();
              latNode = nl3.item(getNodeIndex(nl3, "points"));
              ArrayList&lt;LatLng&gt; arr = decodePoly(latNode.getTextContent());
              for(int j = 0 ; j &lt; arr.size() ; j++) {
                  listGeopoints.add(new LatLng(arr.get(j).latitude, arr.get(j).longitude));
              }
  
              locationNode = nl2.item(getNodeIndex(nl2, "end_location"));
              nl3 = locationNode.getChildNodes();
              latNode = nl3.item(getNodeIndex(nl3, "lat"));
              lat = Double.parseDouble(latNode.getTextContent());
              lngNode = nl3.item(getNodeIndex(nl3, "lng"));
              lng = Double.parseDouble(lngNode.getTextContent());
              listGeopoints.add(new LatLng(lat, lng));
          }
      }
  
      return listGeopoints;
  }
  
  private int getNodeIndex(NodeList nl, String nodename) {
      for(int i = 0 ; i &lt; nl.getLength() ; i++) {
          if(nl.item(i).getNodeName().equals(nodename))
              return i;
      }
      return -1;
  }
  
  private ArrayList&lt;LatLng&gt; decodePoly(String encoded) {
      ArrayList&lt;LatLng&gt; poly = new ArrayList&lt;LatLng&gt;();
      int index = 0, len = encoded.length();
      int lat = 0, lng = 0;
      while (index &lt; len) {
          int b, shift = 0, result = 0;
          do {
              b = encoded.charAt(index++) - 63;
              result |= (b &amp; 0x1f) &lt;&lt; shift;
              shift += 5;
          } while (b &gt;= 0x20);
          int dlat = ((result &amp; 1) != 0 ? ~(result &gt;&gt; 1) : (result &gt;&gt; 1));
          lat += dlat;
          shift = 0;
          result = 0;
          do {
              b = encoded.charAt(index++) - 63;
              result |= (b &amp; 0x1f) &lt;&lt; shift;
              shift += 5;
          } while (b &gt;= 0x20);
          int dlng = ((result &amp; 1) != 0 ? ~(result &gt;&gt; 1) : (result &gt;&gt; 1));
          lng += dlng;
  
          LatLng position = new LatLng((double) lat / 1E5, (double) lng / 1E5);
          poly.add(position);
      }
      return poly;
  }
  }
  </code></pre>