2015-10-13 5 views
0

Привет, я работаю с android. Я создал приложение для определения местоположения пользователей с интервалом. Я могу построить маркеры с соответствующими значениями широты и долготы arraylist. Теперь я хочу провести маршрут между этими маркерами. Я использовал приведенный ниже код для построения двух маркеров. Итак, как я могу подключить все мои маркеры в порядке моего arraylist. Пожалуйста, помогите мне. Спасибо заранее.Как рисовать путь между несколькими маркерами в android

private class ParserTask extends 
      AsyncTask<String, Integer, List<List<HashMap<String, String>>>> { 

     @Override 
     protected List<List<HashMap<String, String>>> doInBackground(
       String... jsonData) { 

      JSONObject jObject; 
      List<List<HashMap<String, String>>> routes = null; 

      try { 
       jObject = new JSONObject(jsonData[0]); 
       PathJsonParser parser = new PathJsonParser(); 
       routes = parser.parse(jObject); 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 
      return routes; 
     } 

     @Override 
     protected void onPostExecute(List<List<HashMap<String, String>>> routes) { 
      ArrayList<LatLng> points = null; 
      PolylineOptions polyLineOptions = null; 

      try { 

       // traversing through routes 
       for (int i = 0; i < routes.size(); i++) { 
        points = new ArrayList<LatLng>(); 
        polyLineOptions = new PolylineOptions(); 
        List<HashMap<String, String>> path = routes.get(i); 

        for (int j = 0; j < path.size(); j++) { 
         HashMap<String, String> point = path.get(j); 

         double lat = Double.parseDouble(point.get("lat")); 
         double lng = Double.parseDouble(point.get("lng")); 
         LatLng position = new LatLng(lat, lng); 

         points.add(position); 
        } 

        polyLineOptions.addAll(points); 
        polyLineOptions.width(2); 
        polyLineOptions.color(Color.BLUE); 
       } 

       googleMap.addPolyline(polyLineOptions); 
      }catch(NullPointerException e) { 

       Toast.makeText(
         getActivity(), 
         "Please check your internet connection !", 
         Toast.LENGTH_LONG).show(); 
       //If data == null it will pass here 
      } 

     } 
    } 


    private String getMapsApiDirectionsUrl() { 
     String waypoints = "waypoints=optimize:true|" 
       + start.latitude + "," + start.latitude; 

     String sensor = "sensor=false"; 
     String params = waypoints + "&" + sensor; 
     String output = "json"; 
     String url = "https://maps.googleapis.com/maps/api/directions/" 
       + output + "?" + params; 
     return url; 
    } 
+1

Пожалуйста, проверьте этот ответ, надеюсь, это поможет. http://stackoverflow.com/a/33094777/5093415 – Ramz

ответ

1

Используйте этот

Polyline line = map.addPolyline(new PolylineOptions().width(3).color(Color.RED)); 
line.setPoints(points); 

, где точки является список LatLng

+0

Обратите внимание, что: используя полилинию, рисует линию между маркерами, игнорируя дороги (внедорожники), поэтому линия может пересекать здания, например, поэтому ее лучше получить список соседних LatLong из google Directions api, который дает точный список точек, которые на самом деле находятся на дороге, а затем используйте полилинию. обратитесь по этой ссылке: http://stackoverflow.com/questions/33094240/how-to-get-driving-distance-between-two-locations/33094777#33094777 –

+0

@ NouranS.Ahmad Данная ссылка не показывает, как для рисования пути между несколькими маркерами. Есть ли действующая ссылка для этого –

0

Попробуйте это будет работать

PolylineOptions lineOptions = new PolylineOptions(); 

lineOptions.setPoints(points); 
polyline = mMap.addPolyline(lineOptions); 
     polyline.setWidth(5); 
     polyline.setColor(Color.BLACK); 

Где points является ArrayList типа Latlng