2016-11-11 1 views
0

Я андроид noob, и я изучаю андроид-карты api. Я имею в виду это site. Я могу понять все, кроме расстояния и продолжительности поиска. Ниже приведен синтаксический код JSON.как расстояние и продолжительность фактически вычисляются в android google maps direction api?

public List<List<HashMap<String,String>>> parse(JSONObject jObject){ 

    List<List<HashMap<String, String>>> routes = new  ArrayList<List<HashMap<String,String>>>() ; 
    JSONArray jRoutes = null; 
    JSONArray jLegs = null; 
    JSONArray jSteps = null; 
    JSONObject jDistance = null; 
    JSONObject jDuration = null; 

    try { 

     jRoutes = jObject.getJSONArray("routes"); 

     /** Traversing all routes */ 
     for(int i=0;i<jRoutes.length();i++){ 
      jLegs = ((JSONObject)jRoutes.get(i)).getJSONArray("legs"); 

      List<HashMap<String, String>> path = new ArrayList<HashMap<String, String>>(); 

      /** Traversing all legs */ 
      for(int j=0;j<jLegs.length();j++){ 

       /** Getting distance from the json data */ 
       jDistance = ((JSONObject) jLegs.get(j)).getJSONObject("distance"); 
       HashMap<String, String> hmDistance = new HashMap<String, String>(); 
       hmDistance.put("distance", jDistance.getString("text")); 

       /** Getting duration from the json data */ 
       jDuration = ((JSONObject) jLegs.get(j)).getJSONObject("duration"); 
       HashMap<String, String> hmDuration = new HashMap<String, String>(); 
       hmDuration.put("duration", jDuration.getString("text")); 

       /** Adding distance object to the path */ 
       path.add(hmDistance); 

       /** Adding duration object to the path */ 
       path.add(hmDuration); 

       jSteps = ((JSONObject)jLegs.get(j)).getJSONArray("steps"); 

       /** Traversing all steps */ 
       for(int k=0;k<jSteps.length();k++){ 
        String polyline = ""; 
        polyline = (String)((JSONObject)((JSONObject)jSteps.get(k)).get("polyline")).get("points"); 
        List<LatLng> list = decodePoly(polyline); 

        /** Traversing all points */ 
        for(int l=0;l<list.size();l++){ 
         HashMap<String, String> hm = new HashMap<String, String>(); 
         hm.put("lat", Double.toString(((LatLng)list.get(l)).latitude)); 
         hm.put("lng", Double.toString(((LatLng)list.get(l)).longitude)); 
         path.add(hm); 
        } 
       } 
      } 
      routes.add(path); 
     } 
    } catch (JSONException e) { 
     e.printStackTrace(); 
    }catch (Exception e){ 
    } 
    return routes; 
} 

Они получают расстояние и продолжительность данных для каждого Docs leg.The Android говорит, расстояние показывает общее расстояние, пройденное этим отрезком и «продолжительность указывает на общую продолжительность этого этапа «. Так что мое предположение было, во время окончательного вычисления расстояния и продолжительности, , все эти данные будут добавлены.

Это окончательный код:

protected void onPostExecute(List<List<HashMap<String, String>>> result) { 
     ArrayList<LatLng> points = null; 
     PolylineOptions lineOptions = null; 
     MarkerOptions markerOptions = new MarkerOptions(); 
     String distance = ""; 
     String duration = ""; 

     if(result.size()<1){ 
      Toast.makeText(getBaseContext(), "No Points", Toast.LENGTH_SHORT).show(); 
      return; 
     } 

     // Traversing through all the routes 
     for(int i=0;i<result.size();i++){ 
      points = new ArrayList<LatLng>(); 
      lineOptions = new PolylineOptions(); 

      // Fetching i-th route 
      List<HashMap<String, String>> path = result.get(i); 

      // Fetching all the points in i-th route 
      for(int j=0;j<path.size();j++){ 
       HashMap<String,String> point = path.get(j); 

       if(j==0){ // Get distance from the list 
        distance = (String)point.get("distance"); 
        continue; 
       }else if(j==1){ // Get duration from the list 
        duration = (String)point.get("duration"); 
        continue; 
       } 

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

       points.add(position); 
      } 

      // Adding all the points in the route to LineOptions 
      lineOptions.addAll(points); 
      lineOptions.width(2); 
      lineOptions.color(Color.RED); 
     } 

     tvDistanceDuration.setText("Distance:"+distance + ", Duration:"+duration); 

     // Drawing polyline in the Google Map for the i-th route 
     map.addPolyline(lineOptions); 
    } 
} 

Мое предположение пошел wrong.Here расстояние и продолжительность извлекаются для каждой ноги (они даже не сохраняются) и после цикла по каждому маршруту и ​​ноги, наконец, textview устанавливается на эти переменные (расстояние и продолжительность), и это дает общее расстояние и продолжительность.

Итак, мой вопрос в том, как вычисляются общие расстояния и продолжительность без каких-либо математических математических операций, в то время как мы проанализировали те объекты, которые соответствуют всем отдельным ногам?

ответ

0

использовать расстояние матрицы api, чтобы получить фактическое расстояние и время. см сильфона ссылку

https://developers.google.com/maps/documentation/distance-matrix/start

+0

чем разница между Directions API и API матрицы расстояний? – adi

+0

Расстояние матрицы api обеспечивает только расстояние и время, но направления api обеспечивают маршруты (детали шагов ноги) между двумя местоположениями. – anu

Смежные вопросы