2016-11-11 4 views
0

私はアンドロイドのノブです。私はアンドロイドマップapiを探検しています。私はこれを参照していますsite。 私は距離と時間の取得以外のすべてを理解することができます。 JSON解析コードを以下に示します。実際にアンドロイドのGoogleマップ方向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; 
} 

彼らはすべての単一leg.The Androidのドキュメントのための距離と所要時間データを取得しているが距離はこの足「期間によってカバーされる全距離を示している。この足の合計時間を示し、言います"。私の前提は、最終的な距離と継続時間の計算の間に、 すべてのこれらのデータが追加されたということでした。

これは、最終的なコードです:私の仮定は、距離と所要時間はすべての足のために取得されwrong.Here行ってきました

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); 
    } 
} 

(彼らも保存されません)、そして最後に、すべてのルートと脚、をループした後textviewはそれらの変数(距離と持続時間)に設定され、全​​体の距離と継続時間が与えられます。

私の質問は、手動の数学的操作をせずに全体の距離と期間を計算する方法です。私たちはすべての個々の脚に対応するオブジェクトを解析しましたか?

答えて

0

実際の距離と時間を取得するための距離行列apiを使用します。方向APIと距離行列APIの違いは何ですか?

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

+0

怒鳴るのリンクを参照してください – adi

+0

距離行列apiは距離と時間のみを提供しますが、方向apiは2つの場所間のルート(脚のステップ詳細)を提供します。 – anu

関連する問題